Checkin for Seaspider and Parser generator script.
authorSafey A.Halim <safey.allah@gmail.com>
Thu, 21 Oct 2010 21:45:23 +0000 (21:45 +0000)
committerSafey A.Halim <safey.allah@gmail.com>
Thu, 21 Oct 2010 21:45:23 +0000 (21:45 +0000)
93 files changed:
bin/javacc [new file with mode: 0755]
bin/jtb
contrib/antlr-runtime-3.1.3.jar [new file with mode: 0644]
contrib/gnunet-tree-builder/GNUnetParser.java [deleted file]
contrib/gnunet-tree-builder/gtb [deleted file]
contrib/gnunet-tree-builder/regenerate [deleted file]
contrib/jtb.jar [new file with mode: 0644]
contrib/sqljet.1.0.3.b914.jar [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/CParserConstants.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/CParserTokenManager.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/ExpressionDatabaseHandler.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/GNUnetDepthFirstVisitor.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/GNUnetParser.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/ParseException.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/SimpleCharStream.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/Token.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/TokenMgrError.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ANDExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AdditiveExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ArgumentExpressionList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Array.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentOperator.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentOrTypeExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/CastExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/CompoundStatement.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ConditionalExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Constant.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ConstantExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/DataType.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EnumSpecifier.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Enumerator.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EnumeratorList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EqualityExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExclusiveORExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Expression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExpressionStatement.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExternalDeclaration.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/FunctionDeclaration.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/FunctionType.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/IdentifierList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InclusiveORExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitDeclarator.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitDeclaratorList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Initializer.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitializerList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/IterationStatement.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/JumpStatement.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LabeledStatement.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LocalVariableDeclaration.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LogicalANDExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LogicalORExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/MultiplicativeExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NoIdentifierTypeSpecifier.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Node.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeChoice.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeListInterface.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeListOptional.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeOptional.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeSequence.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeToken.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ParameterDeclaration.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ParameterList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Pointer.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/PostfixExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/PrimaryExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/RelationalExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/SelectionStatement.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ShiftExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Statement.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StorageClassSpecifier.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructDeclaration.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructDeclarationList.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructOrUnion.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructOrUnionSpecifier.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TranslationUnit.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TypeDeclaration.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TypeSpecifier.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/UnaryExpression.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/UnaryOperator.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/VariableClassSpecifier.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/VariableDeclaration.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/DepthFirstVisitor.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJDepthFirst.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJNoArguDepthFirst.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJNoArguVisitor.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVisitor.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVoidDepthFirst.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVoidVisitor.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/TreeDumper.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/TreeFormatter.java [new file with mode: 0644]
src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/Visitor.java [new file with mode: 0644]

diff --git a/bin/javacc b/bin/javacc
new file mode 100755 (executable)
index 0000000..12bd47d
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+cd "$@"/org/gnunet/seaspider/parser
+javacc -STATIC=false C.out.jj
+echo 'package org.gnunet.monkey.parser;' > PACKAGE
+for n in *.java
+do
+ cat $n >> PACKAGE
+ mv PACKAGE $n
+ echo 'package org.gnunet.monkey.parser;' > PACKAGE
+done
+
+rm -f PACKAGE
+               
\ No newline at end of file
diff --git a/bin/jtb b/bin/jtb
index baa6bf4613120fef64d15e62be2144bde7e9e6a4..8f23675cec60442626bf7398f1e827f9bd7a70fb 100755 (executable)
--- a/bin/jtb
+++ b/bin/jtb
@@ -1,4 +1,8 @@
 #!/bin/sh
+
 MYDIR=`dirname $0`
 JTB_JAR=`echo ${MYDIR}/../contrib/jtb.jar`
-java -jar $JTB_JAR "$@"
+cd "$@"
+mkdir -p org/gnunet/seaspider/parser
+cd org/gnunet/seaspider/parser 
+java -jar $JTB_JAR -printer -jd -np org.gnunet.seaspider.parser.nodes -vp org.gnunet.seaspider.parser.visitors -o C.out.jj "$@/C.jj"
\ No newline at end of file
diff --git a/contrib/antlr-runtime-3.1.3.jar b/contrib/antlr-runtime-3.1.3.jar
new file mode 100644 (file)
index 0000000..b0a9ea6
Binary files /dev/null and b/contrib/antlr-runtime-3.1.3.jar differ
diff --git a/contrib/gnunet-tree-builder/GNUnetParser.java b/contrib/gnunet-tree-builder/GNUnetParser.java
deleted file mode 100644 (file)
index d1b204c..0000000
+++ /dev/null
@@ -1,5616 +0,0 @@
-package org.gnunet.monkey.parser;
-/* Generated By:JavaCC: Do not edit this line. CParser.java */
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import org.gnunet.monkey.parser.nodes.*;
-
-public class GNUnetParser implements CParserConstants {
-   private static final boolean DEBUG = false;
-   
-   public static void main(String args[])
-   {
-     GNUnetParser parser = null;
-     boolean isFirstFile = true;
-     int fileNotFoundCount = 0;
-     int successCount = 0;
-     int failureCount = 0;
-     System.out.println("C Parser Version 0.1Alpha:  Reading from GNUnet source directory . . .");
-     String gnunetSourcePath = System.getenv("MAINDIR") + "/src";
-     
-     /* Filtering out files */
-     FileFilter filter = new FileFilter() {
-         public boolean accept(File file) {
-             return file.isDirectory();
-         }
-     };
-     
-     /* File filter to get only source and header files */
-     FileFilter sourceFilter = new FileFilter() {
-       public boolean accept(File file) {
-               String fileName = file.getName();
-               return (fileName.endsWith(".c") || fileName.endsWith(".h"));
-       }
-     };
-     
-     File[] dirArr = (new File(gnunetSourcePath)).listFiles(filter);
-     for (int i = 0; i < dirArr.length; i++) {
-        File dir = dirArr[i];
-        File[] fileArr = dir.listFiles(sourceFilter);
-        for (int j = 0; j < fileArr.length; j++) {
-                try {
-                        if (isFirstFile) {
-                                parser = new GNUnetParser(new FileInputStream(fileArr[j].getPath()));
-                                isFirstFile = false;
-                        }
-                        else
-                                parser.ReInit(new FileInputStream(fileArr[j].getPath()));
-                }
-                catch (FileNotFoundException e) {
-                        fileNotFoundCount++;
-                        e.printStackTrace();
-                }
-                try {
-                parser.TranslationUnit();
-                System.out.println("File " + fileArr[j].getName() + " parsed successfully.");
-                successCount++;
-            }
-            catch (ParseException e) {
-                System.out.println("Encountered errors during parsing file " + fileArr[j].getName());
-                failureCount++;
-                if (DEBUG)
-                        e.printStackTrace();
-            }
-        }
-     }
-     System.out.println(successCount + " parsed successfully.");
-     System.out.println("Failed to parse " + failureCount + " files.");
-     System.out.println(fileNotFoundCount + " files not found.");
-  }
-
-  final public TranslationUnit TranslationUnit() throws ParseException {
-   NodeList n0 = new NodeList();
-   ExternalDeclaration n1;
-    label_1:
-    while (true) {
-      n1 = ExternalDeclaration();
-        n0.addNode(n1);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case REGISTER:
-      case UNSIGNED:
-      case TYPEDEF:
-      case DOUBLE:
-      case EXTERN:
-      case STRUCT:
-      case STATIC:
-      case SIGNED:
-      case UNION:
-      case CONST:
-      case FLOAT:
-      case SHORT:
-      case LONG:
-      case ENUM:
-      case AUTO:
-      case VOID:
-      case CHAR:
-      case INT:
-      case IDENTIFIER:
-        ;
-        break;
-      default:
-        jj_la1[0] = jj_gen;
-        break label_1;
-      }
-    }
-     n0.nodes.trimToSize();
-     {if (true) return new TranslationUnit(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public ExternalDeclaration ExternalDeclaration() throws ParseException {
-   NodeListOptional n0 = new NodeListOptional();
-   StorageClassSpecifier n1;
-   NodeChoice n2;
-   FunctionDeclaration n3;
-   StructOrUnionSpecifier n4;
-   VariableDeclaration n5;
-   TypeDeclaration n6;
-    label_2:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case EXTERN:
-      case STATIC:
-        ;
-        break;
-      default:
-        jj_la1[1] = jj_gen;
-        break label_2;
-      }
-      n1 = StorageClassSpecifier();
-        n0.addNode(n1);
-    }
-     n0.nodes.trimToSize();
-    if (jj_2_1(2147483647)) {
-      n3 = FunctionDeclaration();
-           n2 = new NodeChoice(n3, 0);
-    } else if (jj_2_2(2147483647)) {
-      n4 = StructOrUnionSpecifier();
-           n2 = new NodeChoice(n4, 1);
-    } else if (jj_2_3(2147483647)) {
-      n5 = VariableDeclaration();
-           n2 = new NodeChoice(n5, 2);
-    } else if (jj_2_4(2147483647)) {
-      n6 = TypeDeclaration();
-           n2 = new NodeChoice(n6, 3);
-    } else {
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new ExternalDeclaration(n0,n2);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public FunctionDeclaration FunctionDeclaration() throws ParseException {
-   TypeSpecifier n0;
-   NodeToken n1;
-   Token n2;
-   NodeToken n3;
-   Token n4;
-   NodeOptional n5 = new NodeOptional();
-   ParameterList n6;
-   NodeToken n7;
-   Token n8;
-   NodeChoice n9;
-   NodeToken n10;
-   Token n11;
-   CompoundStatement n12;
-    n0 = TypeSpecifier();
-    n2 = jj_consume_token(IDENTIFIER);
-                     n1 = JTBToolkit.makeNodeToken(n2);
-    n4 = jj_consume_token(55);
-            n3 = JTBToolkit.makeNodeToken(n4);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case UNSIGNED:
-    case DOUBLE:
-    case STRUCT:
-    case SIGNED:
-    case UNION:
-    case CONST:
-    case FLOAT:
-    case SHORT:
-    case LONG:
-    case ENUM:
-    case VOID:
-    case CHAR:
-    case INT:
-    case IDENTIFIER:
-      n6 = ParameterList();
-        n5.addNode(n6);
-      break;
-    default:
-      jj_la1[2] = jj_gen;
-      ;
-    }
-    n8 = jj_consume_token(56);
-            n7 = JTBToolkit.makeNodeToken(n8);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 57:
-      n11 = jj_consume_token(57);
-                   n10 = JTBToolkit.makeNodeToken(n11);
-           n9 = new NodeChoice(n10, 0);
-      break;
-    case 61:
-      n12 = CompoundStatement();
-           n9 = new NodeChoice(n12, 1);
-      break;
-    default:
-      jj_la1[3] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new FunctionDeclaration(n0,n1,n3,n5,n7,n9);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public StorageClassSpecifier StorageClassSpecifier() throws ParseException {
-   NodeChoice n0;
-   NodeToken n1;
-   Token n2;
-   NodeToken n3;
-   Token n4;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case STATIC:
-      n2 = jj_consume_token(STATIC);
-                       n1 = JTBToolkit.makeNodeToken(n2);
-           n0 = new NodeChoice(n1, 0);
-      break;
-    case EXTERN:
-      n4 = jj_consume_token(EXTERN);
-                       n3 = JTBToolkit.makeNodeToken(n4);
-           n0 = new NodeChoice(n3, 1);
-      break;
-    default:
-      jj_la1[4] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new StorageClassSpecifier(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public TypeDeclaration TypeDeclaration() throws ParseException {
-   NodeToken n0;
-   Token n1;
-   NodeChoice n2;
-   DataType n3;
-   FunctionType n4;
-   NodeToken n5;
-   Token n6;
-    n1 = jj_consume_token(TYPEDEF);
-                  n0 = JTBToolkit.makeNodeToken(n1);
-    if (jj_2_5(2147483647)) {
-      n3 = DataType();
-           n2 = new NodeChoice(n3, 0);
-    } else {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case UNSIGNED:
-      case DOUBLE:
-      case STRUCT:
-      case SIGNED:
-      case UNION:
-      case CONST:
-      case FLOAT:
-      case SHORT:
-      case LONG:
-      case ENUM:
-      case VOID:
-      case CHAR:
-      case INT:
-      case IDENTIFIER:
-        n4 = FunctionType();
-           n2 = new NodeChoice(n4, 1);
-        break;
-      default:
-        jj_la1[5] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-    n6 = jj_consume_token(57);
-            n5 = JTBToolkit.makeNodeToken(n6);
-     {if (true) return new TypeDeclaration(n0,n2,n5);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public DataType DataType() throws ParseException {
-   StructOrUnionSpecifier n0;
-   NodeToken n1;
-   Token n2;
-    n0 = StructOrUnionSpecifier();
-    n2 = jj_consume_token(IDENTIFIER);
-                     n1 = JTBToolkit.makeNodeToken(n2);
-     {if (true) return new DataType(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public FunctionType FunctionType() throws ParseException {
-   TypeSpecifier n0;
-   NodeToken n1;
-   Token n2;
-   NodeToken n3;
-   Token n4;
-   NodeToken n5;
-   Token n6;
-   NodeToken n7;
-   Token n8;
-   NodeToken n9;
-   Token n10;
-   NodeOptional n11 = new NodeOptional();
-   ParameterList n12;
-   NodeToken n13;
-   Token n14;
-    n0 = TypeSpecifier();
-    n2 = jj_consume_token(55);
-            n1 = JTBToolkit.makeNodeToken(n2);
-    n4 = jj_consume_token(58);
-            n3 = JTBToolkit.makeNodeToken(n4);
-    n6 = jj_consume_token(IDENTIFIER);
-                     n5 = JTBToolkit.makeNodeToken(n6);
-    n8 = jj_consume_token(56);
-            n7 = JTBToolkit.makeNodeToken(n8);
-    n10 = jj_consume_token(55);
-             n9 = JTBToolkit.makeNodeToken(n10);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case UNSIGNED:
-    case DOUBLE:
-    case STRUCT:
-    case SIGNED:
-    case UNION:
-    case CONST:
-    case FLOAT:
-    case SHORT:
-    case LONG:
-    case ENUM:
-    case VOID:
-    case CHAR:
-    case INT:
-    case IDENTIFIER:
-      n12 = ParameterList();
-        n11.addNode(n12);
-      break;
-    default:
-      jj_la1[6] = jj_gen;
-      ;
-    }
-    n14 = jj_consume_token(56);
-             n13 = JTBToolkit.makeNodeToken(n14);
-     {if (true) return new FunctionType(n0,n1,n3,n5,n7,n9,n11,n13);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public ParameterList ParameterList() throws ParseException {
-   ParameterDeclaration n0;
-   NodeListOptional n1 = new NodeListOptional();
-   NodeSequence n2;
-   NodeToken n3;
-   Token n4;
-   ParameterDeclaration n5;
-   NodeOptional n6 = new NodeOptional();
-   NodeSequence n7;
-   NodeToken n8;
-   Token n9;
-   NodeToken n10;
-   Token n11;
-    n0 = ParameterDeclaration();
-    label_3:
-    while (true) {
-      if (jj_2_6(2)) {
-        ;
-      } else {
-        break label_3;
-      }
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(59);
-               n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = ParameterDeclaration();
-        n2.addNode(n5);
-        n1.addNode(n2);
-    }
-     n1.nodes.trimToSize();
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 59:
-        n7 = new NodeSequence(2);
-      n9 = jj_consume_token(59);
-               n8 = JTBToolkit.makeNodeToken(n9);
-        n7.addNode(n8);
-      n11 = jj_consume_token(60);
-                  n10 = JTBToolkit.makeNodeToken(n11);
-        n7.addNode(n10);
-        n6.addNode(n7);
-      break;
-    default:
-      jj_la1[7] = jj_gen;
-      ;
-    }
-     {if (true) return new ParameterList(n0,n1,n6);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public ParameterDeclaration ParameterDeclaration() throws ParseException {
-   TypeSpecifier n0;
-   NodeToken n1;
-   Token n2;
-   NodeOptional n3 = new NodeOptional();
-   Array n4;
-    n0 = TypeSpecifier();
-    n2 = jj_consume_token(IDENTIFIER);
-                     n1 = JTBToolkit.makeNodeToken(n2);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 65:
-      n4 = Array();
-        n3.addNode(n4);
-      break;
-    default:
-      jj_la1[8] = jj_gen;
-      ;
-    }
-     {if (true) return new ParameterDeclaration(n0,n1,n3);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public VariableDeclaration VariableDeclaration() throws ParseException {
-   VariableClassSpecifier n0;
-   TypeSpecifier n1;
-   InitDeclaratorList n2;
-   NodeToken n3;
-   Token n4;
-    n0 = VariableClassSpecifier();
-    n1 = TypeSpecifier();
-    n2 = InitDeclaratorList();
-    n4 = jj_consume_token(57);
-            n3 = JTBToolkit.makeNodeToken(n4);
-     {if (true) return new VariableDeclaration(n0,n1,n2,n3);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public LocalVariableDeclaration LocalVariableDeclaration() throws ParseException {
-   NodeOptional n0 = new NodeOptional();
-   NodeToken n1;
-   Token n2;
-   VariableDeclaration n3;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case STATIC:
-      n2 = jj_consume_token(STATIC);
-                    n1 = JTBToolkit.makeNodeToken(n2);
-        n0.addNode(n1);
-      break;
-    default:
-      jj_la1[9] = jj_gen;
-      ;
-    }
-    n3 = VariableDeclaration();
-     {if (true) return new LocalVariableDeclaration(n0,n3);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public VariableClassSpecifier VariableClassSpecifier() throws ParseException {
-   NodeListOptional n0 = new NodeListOptional();
-   NodeChoice n1;
-   NodeToken n2;
-   Token n3;
-   NodeToken n4;
-   Token n5;
-    label_4:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case REGISTER:
-      case AUTO:
-        ;
-        break;
-      default:
-        jj_la1[10] = jj_gen;
-        break label_4;
-      }
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case AUTO:
-        n3 = jj_consume_token(AUTO);
-                     n2 = JTBToolkit.makeNodeToken(n3);
-           n1 = new NodeChoice(n2, 0);
-        break;
-      case REGISTER:
-        n5 = jj_consume_token(REGISTER);
-                         n4 = JTBToolkit.makeNodeToken(n5);
-           n1 = new NodeChoice(n4, 1);
-        break;
-      default:
-        jj_la1[11] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-        n0.addNode(n1);
-    }
-     n0.nodes.trimToSize();
-     {if (true) return new VariableClassSpecifier(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public TypeSpecifier TypeSpecifier() throws ParseException {
-   NodeOptional n0 = new NodeOptional();
-   NodeToken n1;
-   Token n2;
-   NodeChoice n3;
-   NodeToken n4;
-   Token n5;
-   NodeToken n6;
-   Token n7;
-   NodeSequence n8;
-   NodeToken n9;
-   Token n10;
-   NodeOptional n11 = new NodeOptional();
-   NodeToken n12;
-   Token n13;
-   NodeToken n14;
-   Token n15;
-   NodeSequence n16;
-   NodeToken n17;
-   Token n18;
-   NodeOptional n19 = new NodeOptional();
-   NodeToken n20;
-   Token n21;
-   NodeToken n22;
-   Token n23;
-   NodeToken n24;
-   Token n25;
-   NodeSequence n26;
-   NodeChoice n27;
-   NodeToken n28;
-   Token n29;
-   NodeToken n30;
-   Token n31;
-   NodeOptional n32 = new NodeOptional();
-   NodeChoice n33;
-   NodeToken n34;
-   Token n35;
-   NodeSequence n36;
-   NodeToken n37;
-   Token n38;
-   NodeOptional n39;
-   NodeToken n40;
-   Token n41;
-   NodeToken n42;
-   Token n43;
-   NodeSequence n44;
-   NodeToken n45;
-   Token n46;
-   NodeOptional n47;
-   NodeToken n48;
-   Token n49;
-   StructOrUnionSpecifier n50;
-   EnumSpecifier n51;
-   NodeToken n52;
-   Token n53;
-   NodeOptional n54 = new NodeOptional();
-   Pointer n55;
-   NodeOptional n56 = new NodeOptional();
-   Array n57;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case CONST:
-      n2 = jj_consume_token(CONST);
-                   n1 = JTBToolkit.makeNodeToken(n2);
-        n0.addNode(n1);
-      break;
-    default:
-      jj_la1[12] = jj_gen;
-      ;
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case VOID:
-      n5 = jj_consume_token(VOID);
-                     n4 = JTBToolkit.makeNodeToken(n5);
-           n3 = new NodeChoice(n4, 0);
-      break;
-    case CHAR:
-      n7 = jj_consume_token(CHAR);
-                     n6 = JTBToolkit.makeNodeToken(n7);
-           n3 = new NodeChoice(n6, 1);
-      break;
-    case SHORT:
-           n8 = new NodeSequence(2);
-      n10 = jj_consume_token(SHORT);
-                       n9 = JTBToolkit.makeNodeToken(n10);
-           n8.addNode(n9);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case INT:
-        n13 = jj_consume_token(INT);
-                        n12 = JTBToolkit.makeNodeToken(n13);
-              n11.addNode(n12);
-        break;
-      default:
-        jj_la1[13] = jj_gen;
-        ;
-      }
-           n8.addNode(n11);
-           n3 = new NodeChoice(n8, 2);
-      break;
-    case INT:
-      n15 = jj_consume_token(INT);
-                     n14 = JTBToolkit.makeNodeToken(n15);
-           n3 = new NodeChoice(n14, 3);
-      break;
-    case LONG:
-           n16 = new NodeSequence(2);
-      n18 = jj_consume_token(LONG);
-                      n17 = JTBToolkit.makeNodeToken(n18);
-           n16.addNode(n17);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LONG:
-        n21 = jj_consume_token(LONG);
-                         n20 = JTBToolkit.makeNodeToken(n21);
-              n19.addNode(n20);
-        break;
-      default:
-        jj_la1[14] = jj_gen;
-        ;
-      }
-           n16.addNode(n19);
-           n3 = new NodeChoice(n16, 4);
-      break;
-    case FLOAT:
-      n23 = jj_consume_token(FLOAT);
-                       n22 = JTBToolkit.makeNodeToken(n23);
-           n3 = new NodeChoice(n22, 5);
-      break;
-    case DOUBLE:
-      n25 = jj_consume_token(DOUBLE);
-                        n24 = JTBToolkit.makeNodeToken(n25);
-           n3 = new NodeChoice(n24, 6);
-      break;
-    case UNSIGNED:
-    case SIGNED:
-           n26 = new NodeSequence(2);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case SIGNED:
-        n29 = jj_consume_token(SIGNED);
-                              n28 = JTBToolkit.makeNodeToken(n29);
-                 n27 = new NodeChoice(n28, 0);
-        break;
-      case UNSIGNED:
-        n31 = jj_consume_token(UNSIGNED);
-                                n30 = JTBToolkit.makeNodeToken(n31);
-                 n27 = new NodeChoice(n30, 1);
-        break;
-      default:
-        jj_la1[15] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-           n26.addNode(n27);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case SHORT:
-      case LONG:
-      case CHAR:
-      case INT:
-              n39 = new NodeOptional();
-              n47 = new NodeOptional();
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case CHAR:
-          n35 = jj_consume_token(CHAR);
-                            n34 = JTBToolkit.makeNodeToken(n35);
-                 n33 = new NodeChoice(n34, 0);
-          break;
-        case SHORT:
-                 n36 = new NodeSequence(2);
-          n38 = jj_consume_token(SHORT);
-                             n37 = JTBToolkit.makeNodeToken(n38);
-                 n36.addNode(n37);
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case INT:
-            n41 = jj_consume_token(INT);
-                              n40 = JTBToolkit.makeNodeToken(n41);
-                    n39.addNode(n40);
-            break;
-          default:
-            jj_la1[16] = jj_gen;
-            ;
-          }
-                 n36.addNode(n39);
-                 n33 = new NodeChoice(n36, 1);
-          break;
-        case INT:
-          n43 = jj_consume_token(INT);
-                           n42 = JTBToolkit.makeNodeToken(n43);
-                 n33 = new NodeChoice(n42, 2);
-          break;
-        case LONG:
-                 n44 = new NodeSequence(2);
-          n46 = jj_consume_token(LONG);
-                            n45 = JTBToolkit.makeNodeToken(n46);
-                 n44.addNode(n45);
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case LONG:
-            n49 = jj_consume_token(LONG);
-                               n48 = JTBToolkit.makeNodeToken(n49);
-                    n47.addNode(n48);
-            break;
-          default:
-            jj_la1[17] = jj_gen;
-            ;
-          }
-                 n44.addNode(n47);
-                 n33 = new NodeChoice(n44, 3);
-          break;
-        default:
-          jj_la1[18] = jj_gen;
-          jj_consume_token(-1);
-          throw new ParseException();
-        }
-              n32.addNode(n33);
-        break;
-      default:
-        jj_la1[19] = jj_gen;
-        ;
-      }
-           n26.addNode(n32);
-           n3 = new NodeChoice(n26, 7);
-      break;
-    case STRUCT:
-    case UNION:
-      n50 = StructOrUnionSpecifier();
-           n3 = new NodeChoice(n50, 8);
-      break;
-    case ENUM:
-      n51 = EnumSpecifier();
-           n3 = new NodeChoice(n51, 9);
-      break;
-    case IDENTIFIER:
-      n53 = jj_consume_token(IDENTIFIER);
-                            n52 = JTBToolkit.makeNodeToken(n53);
-           n3 = new NodeChoice(n52, 10);
-      break;
-    default:
-      jj_la1[20] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 58:
-      n55 = Pointer();
-        n54.addNode(n55);
-      break;
-    default:
-      jj_la1[21] = jj_gen;
-      ;
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 65:
-      n57 = Array();
-        n56.addNode(n57);
-      break;
-    default:
-      jj_la1[22] = jj_gen;
-      ;
-    }
-     {if (true) return new TypeSpecifier(n0,n3,n54,n56);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public NoIdentifierTypeSpecifier NoIdentifierTypeSpecifier() throws ParseException {
-   NodeOptional n0 = new NodeOptional();
-   NodeToken n1;
-   Token n2;
-   NodeChoice n3;
-   NodeToken n4;
-   Token n5;
-   NodeToken n6;
-   Token n7;
-   NodeSequence n8;
-   NodeToken n9;
-   Token n10;
-   NodeOptional n11 = new NodeOptional();
-   NodeToken n12;
-   Token n13;
-   NodeToken n14;
-   Token n15;
-   NodeSequence n16;
-   NodeToken n17;
-   Token n18;
-   NodeOptional n19 = new NodeOptional();
-   NodeToken n20;
-   Token n21;
-   NodeToken n22;
-   Token n23;
-   NodeToken n24;
-   Token n25;
-   NodeSequence n26;
-   NodeChoice n27;
-   NodeToken n28;
-   Token n29;
-   NodeToken n30;
-   Token n31;
-   NodeOptional n32 = new NodeOptional();
-   NodeChoice n33;
-   NodeToken n34;
-   Token n35;
-   NodeSequence n36;
-   NodeToken n37;
-   Token n38;
-   NodeOptional n39;
-   NodeToken n40;
-   Token n41;
-   NodeToken n42;
-   Token n43;
-   NodeSequence n44;
-   NodeToken n45;
-   Token n46;
-   NodeOptional n47;
-   NodeToken n48;
-   Token n49;
-   StructOrUnionSpecifier n50;
-   EnumSpecifier n51;
-   NodeOptional n52 = new NodeOptional();
-   Pointer n53;
-   NodeOptional n54 = new NodeOptional();
-   Array n55;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case CONST:
-      n2 = jj_consume_token(CONST);
-                   n1 = JTBToolkit.makeNodeToken(n2);
-        n0.addNode(n1);
-      break;
-    default:
-      jj_la1[23] = jj_gen;
-      ;
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case VOID:
-      n5 = jj_consume_token(VOID);
-                     n4 = JTBToolkit.makeNodeToken(n5);
-           n3 = new NodeChoice(n4, 0);
-      break;
-    case CHAR:
-      n7 = jj_consume_token(CHAR);
-                     n6 = JTBToolkit.makeNodeToken(n7);
-           n3 = new NodeChoice(n6, 1);
-      break;
-    case SHORT:
-           n8 = new NodeSequence(2);
-      n10 = jj_consume_token(SHORT);
-                       n9 = JTBToolkit.makeNodeToken(n10);
-           n8.addNode(n9);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case INT:
-        n13 = jj_consume_token(INT);
-                        n12 = JTBToolkit.makeNodeToken(n13);
-              n11.addNode(n12);
-        break;
-      default:
-        jj_la1[24] = jj_gen;
-        ;
-      }
-           n8.addNode(n11);
-           n3 = new NodeChoice(n8, 2);
-      break;
-    case INT:
-      n15 = jj_consume_token(INT);
-                     n14 = JTBToolkit.makeNodeToken(n15);
-           n3 = new NodeChoice(n14, 3);
-      break;
-    case LONG:
-           n16 = new NodeSequence(2);
-      n18 = jj_consume_token(LONG);
-                      n17 = JTBToolkit.makeNodeToken(n18);
-           n16.addNode(n17);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case LONG:
-        n21 = jj_consume_token(LONG);
-                         n20 = JTBToolkit.makeNodeToken(n21);
-              n19.addNode(n20);
-        break;
-      default:
-        jj_la1[25] = jj_gen;
-        ;
-      }
-           n16.addNode(n19);
-           n3 = new NodeChoice(n16, 4);
-      break;
-    case FLOAT:
-      n23 = jj_consume_token(FLOAT);
-                       n22 = JTBToolkit.makeNodeToken(n23);
-           n3 = new NodeChoice(n22, 5);
-      break;
-    case DOUBLE:
-      n25 = jj_consume_token(DOUBLE);
-                        n24 = JTBToolkit.makeNodeToken(n25);
-           n3 = new NodeChoice(n24, 6);
-      break;
-    case UNSIGNED:
-    case SIGNED:
-           n26 = new NodeSequence(2);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case SIGNED:
-        n29 = jj_consume_token(SIGNED);
-                              n28 = JTBToolkit.makeNodeToken(n29);
-                 n27 = new NodeChoice(n28, 0);
-        break;
-      case UNSIGNED:
-        n31 = jj_consume_token(UNSIGNED);
-                                n30 = JTBToolkit.makeNodeToken(n31);
-                 n27 = new NodeChoice(n30, 1);
-        break;
-      default:
-        jj_la1[26] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-           n26.addNode(n27);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case SHORT:
-      case LONG:
-      case CHAR:
-      case INT:
-              n39 = new NodeOptional();
-              n47 = new NodeOptional();
-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-        case CHAR:
-          n35 = jj_consume_token(CHAR);
-                            n34 = JTBToolkit.makeNodeToken(n35);
-                 n33 = new NodeChoice(n34, 0);
-          break;
-        case SHORT:
-                 n36 = new NodeSequence(2);
-          n38 = jj_consume_token(SHORT);
-                             n37 = JTBToolkit.makeNodeToken(n38);
-                 n36.addNode(n37);
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case INT:
-            n41 = jj_consume_token(INT);
-                              n40 = JTBToolkit.makeNodeToken(n41);
-                    n39.addNode(n40);
-            break;
-          default:
-            jj_la1[27] = jj_gen;
-            ;
-          }
-                 n36.addNode(n39);
-                 n33 = new NodeChoice(n36, 1);
-          break;
-        case INT:
-          n43 = jj_consume_token(INT);
-                           n42 = JTBToolkit.makeNodeToken(n43);
-                 n33 = new NodeChoice(n42, 2);
-          break;
-        case LONG:
-                 n44 = new NodeSequence(2);
-          n46 = jj_consume_token(LONG);
-                            n45 = JTBToolkit.makeNodeToken(n46);
-                 n44.addNode(n45);
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case LONG:
-            n49 = jj_consume_token(LONG);
-                               n48 = JTBToolkit.makeNodeToken(n49);
-                    n47.addNode(n48);
-            break;
-          default:
-            jj_la1[28] = jj_gen;
-            ;
-          }
-                 n44.addNode(n47);
-                 n33 = new NodeChoice(n44, 3);
-          break;
-        default:
-          jj_la1[29] = jj_gen;
-          jj_consume_token(-1);
-          throw new ParseException();
-        }
-              n32.addNode(n33);
-        break;
-      default:
-        jj_la1[30] = jj_gen;
-        ;
-      }
-           n26.addNode(n32);
-           n3 = new NodeChoice(n26, 7);
-      break;
-    case STRUCT:
-    case UNION:
-      n50 = StructOrUnionSpecifier();
-           n3 = new NodeChoice(n50, 8);
-      break;
-    case ENUM:
-      n51 = EnumSpecifier();
-           n3 = new NodeChoice(n51, 9);
-      break;
-    default:
-      jj_la1[31] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 58:
-      n53 = Pointer();
-        n52.addNode(n53);
-      break;
-    default:
-      jj_la1[32] = jj_gen;
-      ;
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 65:
-      n55 = Array();
-        n54.addNode(n55);
-      break;
-    default:
-      jj_la1[33] = jj_gen;
-      ;
-    }
-     {if (true) return new NoIdentifierTypeSpecifier(n0,n3,n52,n54);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public StructOrUnionSpecifier StructOrUnionSpecifier() throws ParseException {
-   NodeChoice n0;
-   NodeSequence n1;
-   StructOrUnion n2;
-   NodeOptional n3 = new NodeOptional();
-   NodeToken n4;
-   Token n5;
-   NodeToken n6;
-   Token n7;
-   StructDeclarationList n8;
-   NodeToken n9;
-   Token n10;
-   NodeSequence n11;
-   StructOrUnion n12;
-   NodeToken n13;
-   Token n14;
-    if (jj_2_7(3)) {
-        n1 = new NodeSequence(6);
-      n2 = StructOrUnion();
-        n1.addNode(n2);
-      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[34] = jj_gen;
-        ;
-      }
-        n1.addNode(n3);
-      n7 = jj_consume_token(61);
-               n6 = JTBToolkit.makeNodeToken(n7);
-        n1.addNode(n6);
-      n8 = StructDeclarationList();
-        n1.addNode(n8);
-      n10 = jj_consume_token(62);
-                n9 = JTBToolkit.makeNodeToken(n10);
-        n1.addNode(n9);
-        n0 = new NodeChoice(n1, 0);
-    } else {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case STRUCT:
-      case UNION:
-        n11 = new NodeSequence(2);
-        n12 = StructOrUnion();
-        n11.addNode(n12);
-        n14 = jj_consume_token(IDENTIFIER);
-                         n13 = JTBToolkit.makeNodeToken(n14);
-        n11.addNode(n13);
-        n0 = new NodeChoice(n11, 1);
-        break;
-      default:
-        jj_la1[35] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-     {if (true) return new StructOrUnionSpecifier(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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[36] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new StructOrUnion(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public StructDeclarationList StructDeclarationList() throws ParseException {
-   NodeList n0 = new NodeList();
-   StructDeclaration n1;
-    label_5:
-    while (true) {
-      n1 = StructDeclaration();
-        n0.addNode(n1);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case UNSIGNED:
-      case DOUBLE:
-      case STRUCT:
-      case SIGNED:
-      case UNION:
-      case CONST:
-      case FLOAT:
-      case SHORT:
-      case LONG:
-      case ENUM:
-      case VOID:
-      case CHAR:
-      case INT:
-      case IDENTIFIER:
-        ;
-        break;
-      default:
-        jj_la1[37] = jj_gen;
-        break label_5;
-      }
-    }
-     n0.nodes.trimToSize();
-     {if (true) return new StructDeclarationList(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public InitDeclaratorList InitDeclaratorList() throws ParseException {
-   InitDeclarator n0;
-   NodeListOptional n1 = new NodeListOptional();
-   NodeSequence n2;
-   NodeToken n3;
-   Token n4;
-   InitDeclarator n5;
-    n0 = InitDeclarator();
-    label_6:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 59:
-        ;
-        break;
-      default:
-        jj_la1[38] = jj_gen;
-        break label_6;
-      }
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(59);
-               n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = InitDeclarator();
-        n2.addNode(n5);
-        n1.addNode(n2);
-    }
-     n1.nodes.trimToSize();
-     {if (true) return new InitDeclaratorList(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public InitDeclarator InitDeclarator() throws ParseException {
-   NodeToken n0;
-   Token n1;
-   NodeOptional n2 = new NodeOptional();
-   Array n3;
-   NodeOptional n4 = new NodeOptional();
-   NodeSequence n5;
-   NodeToken n6;
-   Token n7;
-   Initializer n8;
-    n1 = jj_consume_token(IDENTIFIER);
-                     n0 = JTBToolkit.makeNodeToken(n1);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 65:
-      n3 = Array();
-        n2.addNode(n3);
-      break;
-    default:
-      jj_la1[39] = jj_gen;
-      ;
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 63:
-        n5 = new NodeSequence(2);
-      n7 = jj_consume_token(63);
-               n6 = JTBToolkit.makeNodeToken(n7);
-        n5.addNode(n6);
-      n8 = Initializer();
-        n5.addNode(n8);
-        n4.addNode(n5);
-      break;
-    default:
-      jj_la1[40] = jj_gen;
-      ;
-    }
-     {if (true) return new InitDeclarator(n0,n2,n4);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public StructDeclaration StructDeclaration() throws ParseException {
-   TypeSpecifier n0;
-   NodeToken n1;
-   Token n2;
-   NodeOptional n3 = new NodeOptional();
-   NodeChoice n4;
-   Array n5;
-   NodeSequence n6;
-   NodeToken n7;
-   Token n8;
-   ConstantExpression n9;
-   NodeOptional n10 = new NodeOptional();
-   NodeToken n11;
-   Token n12;
-   NodeToken n13;
-   Token n14;
-    n0 = TypeSpecifier();
-    n2 = jj_consume_token(IDENTIFIER);
-                     n1 = JTBToolkit.makeNodeToken(n2);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 64:
-    case 65:
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 65:
-        n5 = Array();
-           n4 = new NodeChoice(n5, 0);
-        break;
-      case 64:
-           n6 = new NodeSequence(2);
-        n8 = jj_consume_token(64);
-                  n7 = JTBToolkit.makeNodeToken(n8);
-           n6.addNode(n7);
-        n9 = ConstantExpression();
-           n6.addNode(n9);
-           n4 = new NodeChoice(n6, 1);
-        break;
-      default:
-        jj_la1[41] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-        n3.addNode(n4);
-      break;
-    default:
-      jj_la1[42] = jj_gen;
-      ;
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case IDENTIFIER:
-      n12 = jj_consume_token(IDENTIFIER);
-                         n11 = JTBToolkit.makeNodeToken(n12);
-        n10.addNode(n11);
-      break;
-    default:
-      jj_la1[43] = jj_gen;
-      ;
-    }
-    n14 = jj_consume_token(57);
-             n13 = JTBToolkit.makeNodeToken(n14);
-     {if (true) return new StructDeclaration(n0,n1,n3,n10,n13);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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_8(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[44] = jj_gen;
-        ;
-      }
-           n3.addNode(n4);
-      n8 = jj_consume_token(61);
-                  n7 = JTBToolkit.makeNodeToken(n8);
-           n3.addNode(n7);
-      n9 = EnumeratorList();
-           n3.addNode(n9);
-      n11 = jj_consume_token(62);
-                   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[45] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-     {if (true) return new EnumSpecifier(n0,n2);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public EnumeratorList EnumeratorList() throws ParseException {
-   Enumerator n0;
-   NodeListOptional n1 = new NodeListOptional();
-   NodeSequence n2;
-   NodeToken n3;
-   Token n4;
-   Enumerator n5;
-    n0 = Enumerator();
-    label_7:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 59:
-        ;
-        break;
-      default:
-        jj_la1[46] = jj_gen;
-        break label_7;
-      }
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(59);
-               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");
-  }
-
-  final public 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 63:
-        n3 = new NodeSequence(2);
-      n5 = jj_consume_token(63);
-               n4 = JTBToolkit.makeNodeToken(n5);
-        n3.addNode(n4);
-      n6 = ConstantExpression();
-        n3.addNode(n6);
-        n2.addNode(n3);
-      break;
-    default:
-      jj_la1[47] = jj_gen;
-      ;
-    }
-     {if (true) return new Enumerator(n0,n2);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Pointer Pointer() throws ParseException {
-   NodeToken n0;
-   Token n1;
-   NodeOptional n2 = new NodeOptional();
-   NodeToken n3;
-   Token n4;
-   NodeOptional n5 = new NodeOptional();
-   Pointer n6;
-    n1 = jj_consume_token(58);
-            n0 = JTBToolkit.makeNodeToken(n1);
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case CONST:
-      n4 = jj_consume_token(CONST);
-                   n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      break;
-    default:
-      jj_la1[48] = jj_gen;
-      ;
-    }
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 58:
-      n6 = Pointer();
-        n5.addNode(n6);
-      break;
-    default:
-      jj_la1[49] = jj_gen;
-      ;
-    }
-     {if (true) return new Pointer(n0,n2,n5);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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_8:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 59:
-        ;
-        break;
-      default:
-        jj_la1[50] = jj_gen;
-        break label_8;
-      }
-        n3 = new NodeSequence(2);
-      n5 = jj_consume_token(59);
-               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");
-  }
-
-  final public 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 55:
-    case 58:
-    case 82:
-    case 91:
-    case 92:
-    case 95:
-    case 96:
-    case 97:
-    case 98:
-      n1 = AssignmentExpression();
-           n0 = new NodeChoice(n1, 0);
-      break;
-    case 61:
-           n2 = new NodeSequence(4);
-      n4 = jj_consume_token(61);
-                  n3 = JTBToolkit.makeNodeToken(n4);
-           n2.addNode(n3);
-      n5 = InitializerList();
-           n2.addNode(n5);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 59:
-        n8 = jj_consume_token(59);
-                     n7 = JTBToolkit.makeNodeToken(n8);
-              n6.addNode(n7);
-        break;
-      default:
-        jj_la1[51] = jj_gen;
-        ;
-      }
-           n2.addNode(n6);
-      n10 = jj_consume_token(62);
-                   n9 = JTBToolkit.makeNodeToken(n10);
-           n2.addNode(n9);
-           n0 = new NodeChoice(n2, 1);
-      break;
-    default:
-      jj_la1[52] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new Initializer(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public InitializerList InitializerList() throws ParseException {
-   Initializer n0;
-   NodeListOptional n1 = new NodeListOptional();
-   NodeSequence n2;
-   NodeToken n3;
-   Token n4;
-   Initializer n5;
-    n0 = Initializer();
-    label_9:
-    while (true) {
-      if (jj_2_9(2)) {
-        ;
-      } else {
-        break label_9;
-      }
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(59);
-               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");
-  }
-
-  final public Array Array() throws ParseException {
-   NodeToken n0;
-   Token n1;
-   NodeOptional n2 = new NodeOptional();
-   ConstantExpression n3;
-   NodeToken n4;
-   Token n5;
-    n1 = jj_consume_token(65);
-            n0 = JTBToolkit.makeNodeToken(n1);
-    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 55:
-    case 58:
-    case 82:
-    case 91:
-    case 92:
-    case 95:
-    case 96:
-    case 97:
-    case 98:
-      n3 = ConstantExpression();
-        n2.addNode(n3);
-      break;
-    default:
-      jj_la1[53] = jj_gen;
-      ;
-    }
-    n5 = jj_consume_token(66);
-            n4 = JTBToolkit.makeNodeToken(n5);
-     {if (true) return new Array(n0,n2,n4);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Statement Statement() throws ParseException {
-   NodeChoice n0;
-   LabeledStatement n1;
-   ExpressionStatement n2;
-   CompoundStatement n3;
-   SelectionStatement n4;
-   IterationStatement n5;
-   JumpStatement n6;
-    if (jj_2_10(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 55:
-      case 57:
-      case 58:
-      case 82:
-      case 91:
-      case 92:
-      case 95:
-      case 96:
-      case 97:
-      case 98:
-        n2 = ExpressionStatement();
-           n0 = new NodeChoice(n2, 1);
-        break;
-      case 61:
-        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[54] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-     {if (true) return new Statement(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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(64);
-                  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(64);
-                   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(64);
-                   n17 = JTBToolkit.makeNodeToken(n18);
-           n14.addNode(n17);
-      n19 = Statement();
-           n14.addNode(n19);
-           n0 = new NodeChoice(n14, 2);
-      break;
-    default:
-      jj_la1[55] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new LabeledStatement(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 55:
-    case 58:
-    case 82:
-    case 91:
-    case 92:
-    case 95:
-    case 96:
-    case 97:
-    case 98:
-      n1 = Expression();
-        n0.addNode(n1);
-      break;
-    default:
-      jj_la1[56] = jj_gen;
-      ;
-    }
-    n3 = jj_consume_token(57);
-            n2 = JTBToolkit.makeNodeToken(n3);
-     {if (true) return new ExpressionStatement(n0,n2);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public CompoundStatement CompoundStatement() throws ParseException {
-   NodeToken n0;
-   Token n1;
-   NodeListOptional n2 = new NodeListOptional();
-   NodeChoice n3;
-   LocalVariableDeclaration n4;
-   Statement n5;
-   NodeToken n6;
-   Token n7;
-    n1 = jj_consume_token(61);
-            n0 = JTBToolkit.makeNodeToken(n1);
-    label_10:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case INTEGER_LITERAL:
-      case FLOATING_POINT_LITERAL:
-      case CHARACTER_LITERAL:
-      case STRING_LITERAL:
-      case CONTINUE:
-      case REGISTER:
-      case UNSIGNED:
-      case DFLT:
-      case DOUBLE:
-      case SIZEOF:
-      case SWITCH:
-      case RETURN:
-      case STRUCT:
-      case STATIC:
-      case SIGNED:
-      case WHILE:
-      case BREAK:
-      case UNION:
-      case CONST:
-      case FLOAT:
-      case SHORT:
-      case CASE:
-      case LONG:
-      case ENUM:
-      case AUTO:
-      case VOID:
-      case CHAR:
-      case GOTO:
-      case FOR:
-      case INT:
-      case IF:
-      case DO:
-      case IDENTIFIER:
-      case 55:
-      case 57:
-      case 58:
-      case 61:
-      case 82:
-      case 91:
-      case 92:
-      case 95:
-      case 96:
-      case 97:
-      case 98:
-        ;
-        break;
-      default:
-        jj_la1[57] = jj_gen;
-        break label_10;
-      }
-      if (jj_2_11(2147483647)) {
-        n4 = LocalVariableDeclaration();
-           n3 = new NodeChoice(n4, 0);
-      } 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 55:
-        case 57:
-        case 58:
-        case 61:
-        case 82:
-        case 91:
-        case 92:
-        case 95:
-        case 96:
-        case 97:
-        case 98:
-          n5 = Statement();
-           n3 = new NodeChoice(n5, 1);
-          break;
-        default:
-          jj_la1[58] = jj_gen;
-          jj_consume_token(-1);
-          throw new ParseException();
-        }
-      }
-        n2.addNode(n3);
-    }
-     n2.nodes.trimToSize();
-    n7 = jj_consume_token(62);
-            n6 = JTBToolkit.makeNodeToken(n7);
-     {if (true) return new CompoundStatement(n0,n2,n6);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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(55);
-                  n4 = JTBToolkit.makeNodeToken(n5);
-           n1.addNode(n4);
-      n6 = Expression();
-           n1.addNode(n6);
-      n8 = jj_consume_token(56);
-                  n7 = JTBToolkit.makeNodeToken(n8);
-           n1.addNode(n7);
-      n9 = Statement();
-           n1.addNode(n9);
-      if (jj_2_12(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(55);
-                   n18 = JTBToolkit.makeNodeToken(n19);
-           n15.addNode(n18);
-      n20 = Expression();
-           n15.addNode(n20);
-      n22 = jj_consume_token(56);
-                   n21 = JTBToolkit.makeNodeToken(n22);
-           n15.addNode(n21);
-      n23 = Statement();
-           n15.addNode(n23);
-           n0 = new NodeChoice(n15, 1);
-      break;
-    default:
-      jj_la1[59] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new SelectionStatement(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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(55);
-                  n4 = JTBToolkit.makeNodeToken(n5);
-           n1.addNode(n4);
-      n6 = Expression();
-           n1.addNode(n6);
-      n8 = jj_consume_token(56);
-                  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(55);
-                   n16 = JTBToolkit.makeNodeToken(n17);
-           n10.addNode(n16);
-      n18 = Expression();
-           n10.addNode(n18);
-      n20 = jj_consume_token(56);
-                   n19 = JTBToolkit.makeNodeToken(n20);
-           n10.addNode(n19);
-      n22 = jj_consume_token(57);
-                   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(55);
-                   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 55:
-      case 58:
-      case 82:
-      case 91:
-      case 92:
-      case 95:
-      case 96:
-      case 97:
-      case 98:
-        n29 = Expression();
-              n28.addNode(n29);
-        break;
-      default:
-        jj_la1[60] = jj_gen;
-        ;
-      }
-           n23.addNode(n28);
-      n31 = jj_consume_token(57);
-                   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 55:
-      case 58:
-      case 82:
-      case 91:
-      case 92:
-      case 95:
-      case 96:
-      case 97:
-      case 98:
-        n33 = Expression();
-              n32.addNode(n33);
-        break;
-      default:
-        jj_la1[61] = jj_gen;
-        ;
-      }
-           n23.addNode(n32);
-      n35 = jj_consume_token(57);
-                   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 55:
-      case 58:
-      case 82:
-      case 91:
-      case 92:
-      case 95:
-      case 96:
-      case 97:
-      case 98:
-        n37 = Expression();
-              n36.addNode(n37);
-        break;
-      default:
-        jj_la1[62] = jj_gen;
-        ;
-      }
-           n23.addNode(n36);
-      n39 = jj_consume_token(56);
-                   n38 = JTBToolkit.makeNodeToken(n39);
-           n23.addNode(n38);
-      n40 = Statement();
-           n23.addNode(n40);
-           n0 = new NodeChoice(n23, 2);
-      break;
-    default:
-      jj_la1[63] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new IterationStatement(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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(57);
-                  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(57);
-                   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(57);
-                   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 55:
-      case 58:
-      case 82:
-      case 91:
-      case 92:
-      case 95:
-      case 96:
-      case 97:
-      case 98:
-        n22 = Expression();
-              n21.addNode(n22);
-        break;
-      default:
-        jj_la1[64] = jj_gen;
-        ;
-      }
-           n18.addNode(n21);
-      n24 = jj_consume_token(57);
-                   n23 = JTBToolkit.makeNodeToken(n24);
-           n18.addNode(n23);
-           n0 = new NodeChoice(n18, 3);
-      break;
-    default:
-      jj_la1[65] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new JumpStatement(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public Expression Expression() throws ParseException {
-   AssignmentExpression n0;
-   NodeListOptional n1 = new NodeListOptional();
-   NodeSequence n2;
-   NodeToken n3;
-   Token n4;
-   AssignmentExpression n5;
-    n0 = AssignmentExpression();
-    label_11:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 59:
-        ;
-        break;
-      default:
-        jj_la1[66] = jj_gen;
-        break label_11;
-      }
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(59);
-               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");
-  }
-
-  final public AssignmentExpression AssignmentExpression() throws ParseException {
-   NodeChoice n0;
-   NodeSequence n1;
-   UnaryExpression n2;
-   AssignmentOperator n3;
-   AssignmentExpression n4;
-   ConditionalExpression n5;
-    if (jj_2_13(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_14(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");
-  }
-
-  final public 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 63:
-      n2 = jj_consume_token(63);
-                  n1 = JTBToolkit.makeNodeToken(n2);
-           n0 = new NodeChoice(n1, 0);
-      break;
-    case 67:
-      n4 = jj_consume_token(67);
-                   n3 = JTBToolkit.makeNodeToken(n4);
-           n0 = new NodeChoice(n3, 1);
-      break;
-    case 68:
-      n6 = jj_consume_token(68);
-                   n5 = JTBToolkit.makeNodeToken(n6);
-           n0 = new NodeChoice(n5, 2);
-      break;
-    case 69:
-      n8 = jj_consume_token(69);
-                   n7 = JTBToolkit.makeNodeToken(n8);
-           n0 = new NodeChoice(n7, 3);
-      break;
-    case 70:
-      n10 = jj_consume_token(70);
-                    n9 = JTBToolkit.makeNodeToken(n10);
-           n0 = new NodeChoice(n9, 4);
-      break;
-    case 71:
-      n12 = jj_consume_token(71);
-                    n11 = JTBToolkit.makeNodeToken(n12);
-           n0 = new NodeChoice(n11, 5);
-      break;
-    case 72:
-      n14 = jj_consume_token(72);
-                     n13 = JTBToolkit.makeNodeToken(n14);
-           n0 = new NodeChoice(n13, 6);
-      break;
-    case 73:
-      n16 = jj_consume_token(73);
-                     n15 = JTBToolkit.makeNodeToken(n16);
-           n0 = new NodeChoice(n15, 7);
-      break;
-    case 74:
-      n18 = jj_consume_token(74);
-                    n17 = JTBToolkit.makeNodeToken(n18);
-           n0 = new NodeChoice(n17, 8);
-      break;
-    case 75:
-      n20 = jj_consume_token(75);
-                    n19 = JTBToolkit.makeNodeToken(n20);
-           n0 = new NodeChoice(n19, 9);
-      break;
-    case 76:
-      n22 = jj_consume_token(76);
-                    n21 = JTBToolkit.makeNodeToken(n22);
-           n0 = new NodeChoice(n21, 10);
-      break;
-    default:
-      jj_la1[67] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new AssignmentOperator(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 77:
-        n2 = new NodeSequence(4);
-      n4 = jj_consume_token(77);
-               n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = Expression();
-        n2.addNode(n5);
-      n7 = jj_consume_token(64);
-               n6 = JTBToolkit.makeNodeToken(n7);
-        n2.addNode(n6);
-      n8 = ConditionalExpression();
-        n2.addNode(n8);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[68] = jj_gen;
-      ;
-    }
-     {if (true) return new ConditionalExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public ConstantExpression ConstantExpression() throws ParseException {
-   ConditionalExpression n0;
-    n0 = ConditionalExpression();
-     {if (true) return new ConstantExpression(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 78:
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(78);
-                n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = LogicalORExpression();
-        n2.addNode(n5);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[69] = jj_gen;
-      ;
-    }
-     {if (true) return new LogicalORExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 79:
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(79);
-                n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = LogicalANDExpression();
-        n2.addNode(n5);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[70] = jj_gen;
-      ;
-    }
-     {if (true) return new LogicalANDExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 80:
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(80);
-               n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = InclusiveORExpression();
-        n2.addNode(n5);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[71] = jj_gen;
-      ;
-    }
-     {if (true) return new InclusiveORExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 81:
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(81);
-               n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = ExclusiveORExpression();
-        n2.addNode(n5);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[72] = jj_gen;
-      ;
-    }
-     {if (true) return new ExclusiveORExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 82:
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(82);
-               n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = ANDExpression();
-        n2.addNode(n5);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[73] = jj_gen;
-      ;
-    }
-     {if (true) return new ANDExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 83:
-    case 84:
-        n2 = new NodeSequence(2);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 83:
-        n5 = jj_consume_token(83);
-                      n4 = JTBToolkit.makeNodeToken(n5);
-              n3 = new NodeChoice(n4, 0);
-        break;
-      case 84:
-        n7 = jj_consume_token(84);
-                      n6 = JTBToolkit.makeNodeToken(n7);
-              n3 = new NodeChoice(n6, 1);
-        break;
-      default:
-        jj_la1[74] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-        n2.addNode(n3);
-      n8 = EqualityExpression();
-        n2.addNode(n8);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[75] = jj_gen;
-      ;
-    }
-     {if (true) return new EqualityExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 85:
-    case 86:
-    case 87:
-    case 88:
-        n2 = new NodeSequence(2);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 85:
-        n5 = jj_consume_token(85);
-                     n4 = JTBToolkit.makeNodeToken(n5);
-              n3 = new NodeChoice(n4, 0);
-        break;
-      case 86:
-        n7 = jj_consume_token(86);
-                     n6 = JTBToolkit.makeNodeToken(n7);
-              n3 = new NodeChoice(n6, 1);
-        break;
-      case 87:
-        n9 = jj_consume_token(87);
-                      n8 = JTBToolkit.makeNodeToken(n9);
-              n3 = new NodeChoice(n8, 2);
-        break;
-      case 88:
-        n11 = jj_consume_token(88);
-                       n10 = JTBToolkit.makeNodeToken(n11);
-              n3 = new NodeChoice(n10, 3);
-        break;
-      default:
-        jj_la1[76] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-        n2.addNode(n3);
-      n12 = RelationalExpression();
-        n2.addNode(n12);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[77] = jj_gen;
-      ;
-    }
-     {if (true) return new RelationalExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 89:
-    case 90:
-        n2 = new NodeSequence(2);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 89:
-        n5 = jj_consume_token(89);
-                      n4 = JTBToolkit.makeNodeToken(n5);
-              n3 = new NodeChoice(n4, 0);
-        break;
-      case 90:
-        n7 = jj_consume_token(90);
-                      n6 = JTBToolkit.makeNodeToken(n7);
-              n3 = new NodeChoice(n6, 1);
-        break;
-      default:
-        jj_la1[78] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-        n2.addNode(n3);
-      n8 = ShiftExpression();
-        n2.addNode(n8);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[79] = jj_gen;
-      ;
-    }
-     {if (true) return new ShiftExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 91:
-    case 92:
-        n2 = new NodeSequence(2);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 91:
-        n5 = jj_consume_token(91);
-                     n4 = JTBToolkit.makeNodeToken(n5);
-              n3 = new NodeChoice(n4, 0);
-        break;
-      case 92:
-        n7 = jj_consume_token(92);
-                     n6 = JTBToolkit.makeNodeToken(n7);
-              n3 = new NodeChoice(n6, 1);
-        break;
-      default:
-        jj_la1[80] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-        n2.addNode(n3);
-      n8 = AdditiveExpression();
-        n2.addNode(n8);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[81] = jj_gen;
-      ;
-    }
-     {if (true) return new AdditiveExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 58:
-    case 93:
-    case 94:
-        n2 = new NodeSequence(2);
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 58:
-        n5 = jj_consume_token(58);
-                     n4 = JTBToolkit.makeNodeToken(n5);
-              n3 = new NodeChoice(n4, 0);
-        break;
-      case 93:
-        n7 = jj_consume_token(93);
-                     n6 = JTBToolkit.makeNodeToken(n7);
-              n3 = new NodeChoice(n6, 1);
-        break;
-      case 94:
-        n9 = jj_consume_token(94);
-                     n8 = JTBToolkit.makeNodeToken(n9);
-              n3 = new NodeChoice(n8, 2);
-        break;
-      default:
-        jj_la1[82] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-        n2.addNode(n3);
-      n10 = MultiplicativeExpression();
-        n2.addNode(n10);
-        n1.addNode(n2);
-      break;
-    default:
-      jj_la1[83] = jj_gen;
-      ;
-    }
-     {if (true) return new MultiplicativeExpression(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public CastExpression CastExpression() throws ParseException {
-   NodeChoice n0;
-   NodeSequence n1;
-   NodeToken n2;
-   Token n3;
-   TypeSpecifier n4;
-   NodeToken n5;
-   Token n6;
-   CastExpression n7;
-   UnaryExpression n8;
-    if (jj_2_15(2147483647)) {
-           n1 = new NodeSequence(5);
-      n3 = jj_consume_token(55);
-                  n2 = JTBToolkit.makeNodeToken(n3);
-           n1.addNode(n2);
-      n4 = TypeSpecifier();
-           n1.addNode(n4);
-      n6 = jj_consume_token(56);
-                  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 55:
-      case 58:
-      case 82:
-      case 91:
-      case 92:
-      case 95:
-      case 96:
-      case 97:
-      case 98:
-        n8 = UnaryExpression();
-           n0 = new NodeChoice(n8, 1);
-        break;
-      default:
-        jj_la1[84] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-     {if (true) return new CastExpression(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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;
-   TypeSpecifier n21;
-   NodeToken n22;
-   Token n23;
-    if (jj_2_17(3)) {
-      n1 = PostfixExpression();
-           n0 = new NodeChoice(n1, 0);
-    } else {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 95:
-           n2 = new NodeSequence(2);
-        n4 = jj_consume_token(95);
-                   n3 = JTBToolkit.makeNodeToken(n4);
-           n2.addNode(n3);
-        n5 = UnaryExpression();
-           n2.addNode(n5);
-           n0 = new NodeChoice(n2, 1);
-        break;
-      case 96:
-           n6 = new NodeSequence(2);
-        n8 = jj_consume_token(96);
-                   n7 = JTBToolkit.makeNodeToken(n8);
-           n6.addNode(n7);
-        n9 = UnaryExpression();
-           n6.addNode(n9);
-           n0 = new NodeChoice(n6, 2);
-        break;
-      case 58:
-      case 82:
-      case 91:
-      case 92:
-      case 97:
-      case 98:
-           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_16(2147483647)) {
-          n17 = UnaryExpression();
-                 n16 = new NodeChoice(n17, 0);
-        } else {
-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-          case 55:
-                 n18 = new NodeSequence(3);
-            n20 = jj_consume_token(55);
-                         n19 = JTBToolkit.makeNodeToken(n20);
-                 n18.addNode(n19);
-            n21 = TypeSpecifier();
-                 n18.addNode(n21);
-            n23 = jj_consume_token(56);
-                         n22 = JTBToolkit.makeNodeToken(n23);
-                 n18.addNode(n22);
-                 n16 = new NodeChoice(n18, 1);
-            break;
-          default:
-            jj_la1[85] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-          }
-        }
-           n13.addNode(n16);
-           n0 = new NodeChoice(n13, 4);
-        break;
-      default:
-        jj_la1[86] = jj_gen;
-        jj_consume_token(-1);
-        throw new ParseException();
-      }
-    }
-     {if (true) return new UnaryExpression(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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 82:
-      n2 = jj_consume_token(82);
-                  n1 = JTBToolkit.makeNodeToken(n2);
-           n0 = new NodeChoice(n1, 0);
-      break;
-    case 58:
-      n4 = jj_consume_token(58);
-                  n3 = JTBToolkit.makeNodeToken(n4);
-           n0 = new NodeChoice(n3, 1);
-      break;
-    case 91:
-      n6 = jj_consume_token(91);
-                  n5 = JTBToolkit.makeNodeToken(n6);
-           n0 = new NodeChoice(n5, 2);
-      break;
-    case 92:
-      n8 = jj_consume_token(92);
-                  n7 = JTBToolkit.makeNodeToken(n8);
-           n0 = new NodeChoice(n7, 3);
-      break;
-    case 97:
-      n10 = jj_consume_token(97);
-                   n9 = JTBToolkit.makeNodeToken(n10);
-           n0 = new NodeChoice(n9, 4);
-      break;
-    case 98:
-      n12 = jj_consume_token(98);
-                   n11 = JTBToolkit.makeNodeToken(n12);
-           n0 = new NodeChoice(n11, 5);
-      break;
-    default:
-      jj_la1[87] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new UnaryOperator(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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_12:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 55:
-      case 65:
-      case 95:
-      case 96:
-      case 99:
-      case 100:
-        ;
-        break;
-      default:
-        jj_la1[88] = jj_gen;
-        break label_12;
-      }
-        n12 = new NodeOptional();
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 65:
-           n3 = new NodeSequence(3);
-        n5 = jj_consume_token(65);
-                  n4 = JTBToolkit.makeNodeToken(n5);
-           n3.addNode(n4);
-        n6 = Expression();
-           n3.addNode(n6);
-        n8 = jj_consume_token(66);
-                  n7 = JTBToolkit.makeNodeToken(n8);
-           n3.addNode(n7);
-           n2 = new NodeChoice(n3, 0);
-        break;
-      case 55:
-           n9 = new NodeSequence(3);
-        n11 = jj_consume_token(55);
-                   n10 = JTBToolkit.makeNodeToken(n11);
-           n9.addNode(n10);
-        if (jj_2_18(2147483647)) {
-          n13 = ArgumentExpressionList();
-              n12.addNode(n13);
-        } else {
-          ;
-        }
-           n9.addNode(n12);
-        n15 = jj_consume_token(56);
-                   n14 = JTBToolkit.makeNodeToken(n15);
-           n9.addNode(n14);
-           n2 = new NodeChoice(n9, 1);
-        break;
-      case 99:
-           n16 = new NodeSequence(2);
-        n18 = jj_consume_token(99);
-                   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 100:
-           n21 = new NodeSequence(2);
-        n23 = jj_consume_token(100);
-                    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 95:
-        n27 = jj_consume_token(95);
-                    n26 = JTBToolkit.makeNodeToken(n27);
-           n2 = new NodeChoice(n26, 4);
-        break;
-      case 96:
-        n29 = jj_consume_token(96);
-                    n28 = JTBToolkit.makeNodeToken(n29);
-           n2 = new NodeChoice(n28, 5);
-        break;
-      default:
-        jj_la1[89] = 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");
-  }
-
-  final public 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 55:
-        n4 = new NodeSequence(3);
-      n6 = jj_consume_token(55);
-               n5 = JTBToolkit.makeNodeToken(n6);
-        n4.addNode(n5);
-      n7 = Expression();
-        n4.addNode(n7);
-      n9 = jj_consume_token(56);
-               n8 = JTBToolkit.makeNodeToken(n9);
-        n4.addNode(n8);
-        n0 = new NodeChoice(n4, 2);
-      break;
-    default:
-      jj_la1[90] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new PrimaryExpression(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public ArgumentExpressionList ArgumentExpressionList() throws ParseException {
-   AssignmentOrTypeExpression n0;
-   NodeListOptional n1 = new NodeListOptional();
-   NodeSequence n2;
-   NodeToken n3;
-   Token n4;
-   AssignmentOrTypeExpression n5;
-    n0 = AssignmentOrTypeExpression();
-    label_13:
-    while (true) {
-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 59:
-        ;
-        break;
-      default:
-        jj_la1[91] = jj_gen;
-        break label_13;
-      }
-        n2 = new NodeSequence(2);
-      n4 = jj_consume_token(59);
-               n3 = JTBToolkit.makeNodeToken(n4);
-        n2.addNode(n3);
-      n5 = AssignmentOrTypeExpression();
-        n2.addNode(n5);
-        n1.addNode(n2);
-    }
-     n1.nodes.trimToSize();
-     {if (true) return new ArgumentExpressionList(n0,n1);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public AssignmentOrTypeExpression AssignmentOrTypeExpression() throws ParseException {
-   NodeChoice n0;
-   NoIdentifierTypeSpecifier n1;
-   AssignmentExpression n2;
-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case UNSIGNED:
-    case DOUBLE:
-    case STRUCT:
-    case SIGNED:
-    case UNION:
-    case CONST:
-    case FLOAT:
-    case SHORT:
-    case LONG:
-    case ENUM:
-    case VOID:
-    case CHAR:
-    case INT:
-      n1 = NoIdentifierTypeSpecifier();
-        n0 = new NodeChoice(n1, 0);
-      break;
-    case INTEGER_LITERAL:
-    case FLOATING_POINT_LITERAL:
-    case CHARACTER_LITERAL:
-    case STRING_LITERAL:
-    case SIZEOF:
-    case IDENTIFIER:
-    case 55:
-    case 58:
-    case 82:
-    case 91:
-    case 92:
-    case 95:
-    case 96:
-    case 97:
-    case 98:
-      n2 = AssignmentExpression();
-        n0 = new NodeChoice(n2, 1);
-      break;
-    default:
-      jj_la1[92] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new AssignmentOrTypeExpression(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  final public 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[93] = jj_gen;
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-     {if (true) return new Constant(n0);}
-    throw new Error("Missing return statement in function");
-  }
-
-  private boolean jj_2_1(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_1(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(0, xla); }
-  }
-
-  private boolean jj_2_2(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_2(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(1, xla); }
-  }
-
-  private boolean jj_2_3(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_3(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(2, xla); }
-  }
-
-  private boolean jj_2_4(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_4(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(3, xla); }
-  }
-
-  private boolean jj_2_5(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_5(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(4, xla); }
-  }
-
-  private boolean jj_2_6(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_6(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(5, xla); }
-  }
-
-  private boolean jj_2_7(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_7(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(6, xla); }
-  }
-
-  private boolean jj_2_8(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_8(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(7, xla); }
-  }
-
-  private boolean jj_2_9(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_9(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(8, xla); }
-  }
-
-  private boolean jj_2_10(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_10(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(9, xla); }
-  }
-
-  private boolean jj_2_11(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_11(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(10, xla); }
-  }
-
-  private boolean jj_2_12(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_12(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(11, xla); }
-  }
-
-  private boolean jj_2_13(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_13(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(12, xla); }
-  }
-
-  private boolean jj_2_14(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_14(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(13, xla); }
-  }
-
-  private boolean jj_2_15(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_15(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(14, xla); }
-  }
-
-  private boolean jj_2_16(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_16(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(15, xla); }
-  }
-
-  private boolean jj_2_17(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_17(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(16, xla); }
-  }
-
-  private boolean jj_2_18(int xla) {
-    jj_la = xla; jj_lastpos = jj_scanpos = token;
-    try { return !jj_3_18(); }
-    catch(LookaheadSuccess ls) { return true; }
-    finally { jj_save(17, xla); }
-  }
-
-  private boolean jj_3R_113() {
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_32()) return true;
-    if (jj_scan_token(56)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_192() {
-    if (jj_scan_token(DOUBLE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_168() {
-    if (jj_3R_123()) return true;
-    return false;
-  }
-
-  private boolean jj_3_6() {
-    if (jj_scan_token(59)) return true;
-    if (jj_3R_19()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_191() {
-    if (jj_scan_token(FLOAT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_112() {
-    if (jj_3R_29()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_203() {
-    if (jj_scan_token(LONG)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_167() {
-    if (jj_scan_token(CONST)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_97() {
-    if (jj_3R_19()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_6()) { jj_scanpos = xsp; break; }
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_136()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_123() {
-    if (jj_scan_token(58)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_167()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_168()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_190() {
-    if (jj_scan_token(LONG)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_203()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_63() {
-    if (jj_scan_token(SIZEOF)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_112()) {
-    jj_scanpos = xsp;
-    if (jj_3R_113()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_161() {
-    if (jj_scan_token(79)) return true;
-    if (jj_3R_114()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_189() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_202() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_114() {
-    if (jj_3R_160()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_161()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_62() {
-    if (jj_3R_111()) return true;
-    if (jj_3R_33()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_188() {
-    if (jj_scan_token(SHORT)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_202()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_61() {
-    if (jj_scan_token(96)) return true;
-    if (jj_3R_29()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_187() {
-    if (jj_scan_token(CHAR)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_142() {
-    if (jj_3R_97()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_186() {
-    if (jj_scan_token(VOID)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_104() {
-    if (jj_scan_token(63)) return true;
-    if (jj_3R_106()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_60() {
-    if (jj_scan_token(95)) return true;
-    if (jj_3R_29()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_47() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_104()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3_17() {
-    if (jj_3R_34()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_185() {
-    if (jj_scan_token(CONST)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_102() {
-    if (jj_3R_32()) return true;
-    if (jj_scan_token(55)) return true;
-    if (jj_scan_token(58)) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_scan_token(56)) return true;
-    if (jj_scan_token(55)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_142()) jj_scanpos = xsp;
-    if (jj_scan_token(56)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_115() {
-    if (jj_scan_token(78)) return true;
-    if (jj_3R_75()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_172() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_185()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_186()) {
-    jj_scanpos = xsp;
-    if (jj_3R_187()) {
-    jj_scanpos = xsp;
-    if (jj_3R_188()) {
-    jj_scanpos = xsp;
-    if (jj_3R_189()) {
-    jj_scanpos = xsp;
-    if (jj_3R_190()) {
-    jj_scanpos = xsp;
-    if (jj_3R_191()) {
-    jj_scanpos = xsp;
-    if (jj_3R_192()) {
-    jj_scanpos = xsp;
-    if (jj_3R_193()) {
-    jj_scanpos = xsp;
-    if (jj_3R_194()) {
-    jj_scanpos = xsp;
-    if (jj_3R_195()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_196()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_197()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_75() {
-    if (jj_3R_114()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_115()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_146() {
-    if (jj_scan_token(SWITCH)) return true;
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_116()) return true;
-    if (jj_scan_token(56)) return true;
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_29() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_17()) {
-    jj_scanpos = xsp;
-    if (jj_3R_60()) {
-    jj_scanpos = xsp;
-    if (jj_3R_61()) {
-    jj_scanpos = xsp;
-    if (jj_3R_62()) {
-    jj_scanpos = xsp;
-    if (jj_3R_63()) return true;
-    }
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3_12() {
-    if (jj_scan_token(ELSE)) return true;
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_48() {
-    if (jj_scan_token(59)) return true;
-    if (jj_3R_47()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_106() {
-    if (jj_3R_31()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_24() {
-    if (jj_3R_47()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_48()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_18() {
-    if (jj_3R_15()) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_145() {
-    if (jj_scan_token(IF)) return true;
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_116()) return true;
-    if (jj_scan_token(56)) return true;
-    if (jj_3R_28()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_12()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3_5() {
-    if (jj_3R_18()) return true;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_108() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_145()) {
-    jj_scanpos = xsp;
-    if (jj_3R_146()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_166() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_43() {
-    if (jj_3R_102()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_92() {
-    if (jj_3R_29()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_76() {
-    if (jj_scan_token(77)) return true;
-    if (jj_3R_116()) return true;
-    if (jj_scan_token(64)) return true;
-    if (jj_3R_31()) return true;
-    return false;
-  }
-
-  private boolean jj_3_15() {
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_32()) return true;
-    if (jj_scan_token(56)) return true;
-    if (jj_3R_33()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_42() {
-    if (jj_3R_18()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_31() {
-    if (jj_3R_75()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_76()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_23() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_91() {
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_32()) return true;
-    if (jj_scan_token(56)) return true;
-    if (jj_3R_33()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_17() {
-    if (jj_scan_token(TYPEDEF)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_42()) {
-    jj_scanpos = xsp;
-    if (jj_3R_43()) return true;
-    }
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3_8() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_23()) jj_scanpos = xsp;
-    if (jj_scan_token(61)) return true;
-    if (jj_3R_24()) return true;
-    if (jj_scan_token(62)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_33() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_91()) {
-    jj_scanpos = xsp;
-    if (jj_3R_92()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_122() {
-    if (jj_scan_token(ENUM)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_8()) {
-    jj_scanpos = xsp;
-    if (jj_3R_166()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_74() {
-    if (jj_scan_token(76)) return true;
-    return false;
-  }
-
-  private boolean jj_3_11() {
-    if (jj_3R_27()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_73() {
-    if (jj_scan_token(75)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_90() {
-    if (jj_3R_124()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_72() {
-    if (jj_scan_token(74)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_175() {
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_71() {
-    if (jj_scan_token(73)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_89() {
-    if (jj_3R_123()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_70() {
-    if (jj_scan_token(72)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_174() {
-    if (jj_3R_27()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_88() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_69() {
-    if (jj_scan_token(71)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_244() {
-    if (jj_scan_token(94)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_87() {
-    if (jj_3R_122()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_137() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_174()) {
-    jj_scanpos = xsp;
-    if (jj_3R_175()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_68() {
-    if (jj_scan_token(70)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_243() {
-    if (jj_scan_token(93)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_86() {
-    if (jj_3R_15()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_179() {
-    if (jj_scan_token(LONG)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_67() {
-    if (jj_scan_token(69)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_242() {
-    if (jj_scan_token(58)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_98() {
-    if (jj_scan_token(61)) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_137()) { jj_scanpos = xsp; break; }
-    }
-    if (jj_scan_token(62)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_199() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_66() {
-    if (jj_scan_token(68)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_183() {
-    if (jj_scan_token(STRING_LITERAL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_65() {
-    if (jj_scan_token(67)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_165() {
-    if (jj_scan_token(LONG)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_179()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_182() {
-    if (jj_scan_token(CHARACTER_LITERAL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_38() {
-    if (jj_3R_98()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_64() {
-    if (jj_scan_token(63)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_239() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_242()) {
-    jj_scanpos = xsp;
-    if (jj_3R_243()) {
-    jj_scanpos = xsp;
-    if (jj_3R_244()) return true;
-    }
-    }
-    if (jj_3R_235()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_208() {
-    if (jj_scan_token(64)) return true;
-    if (jj_3R_106()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_164() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_181() {
-    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_37() {
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_207() {
-    if (jj_3R_124()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_178() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_180() {
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_235() {
-    if (jj_3R_33()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_239()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_198() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_207()) {
-    jj_scanpos = xsp;
-    if (jj_3R_208()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_30() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_64()) {
-    jj_scanpos = xsp;
-    if (jj_3R_65()) {
-    jj_scanpos = xsp;
-    if (jj_3R_66()) {
-    jj_scanpos = xsp;
-    if (jj_3R_67()) {
-    jj_scanpos = xsp;
-    if (jj_3R_68()) {
-    jj_scanpos = xsp;
-    if (jj_3R_69()) {
-    jj_scanpos = xsp;
-    if (jj_3R_70()) {
-    jj_scanpos = xsp;
-    if (jj_3R_71()) {
-    jj_scanpos = xsp;
-    if (jj_3R_72()) {
-    jj_scanpos = xsp;
-    if (jj_3R_73()) {
-    jj_scanpos = xsp;
-    if (jj_3R_74()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_170() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_180()) {
-    jj_scanpos = xsp;
-    if (jj_3R_181()) {
-    jj_scanpos = xsp;
-    if (jj_3R_182()) {
-    jj_scanpos = xsp;
-    if (jj_3R_183()) return true;
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_163() {
-    if (jj_scan_token(SHORT)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_178()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_144() {
-    if (jj_3R_116()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_36() {
-    if (jj_3R_97()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_162() {
-    if (jj_scan_token(CHAR)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_103() {
-    if (jj_3R_32()) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_198()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_199()) jj_scanpos = xsp;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_107() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_144()) jj_scanpos = xsp;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_14() {
-    if (jj_3R_32()) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_scan_token(55)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_36()) jj_scanpos = xsp;
-    if (jj_scan_token(56)) return true;
-    xsp = jj_scanpos;
-    if (jj_3R_37()) {
-    jj_scanpos = xsp;
-    if (jj_3R_38()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_121() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_162()) {
-    jj_scanpos = xsp;
-    if (jj_3R_163()) {
-    jj_scanpos = xsp;
-    if (jj_3R_164()) {
-    jj_scanpos = xsp;
-    if (jj_3R_165()) return true;
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_120() {
-    if (jj_scan_token(UNSIGNED)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_119() {
-    if (jj_scan_token(SIGNED)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_241() {
-    if (jj_scan_token(92)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_135() {
-    if (jj_3R_105()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_240() {
-    if (jj_scan_token(91)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_134() {
-    if (jj_3R_172()) return true;
-    return false;
-  }
-
-  private boolean jj_3_4() {
-    if (jj_3R_17()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_53() {
-    if (jj_scan_token(DFLT)) return true;
-    if (jj_scan_token(64)) return true;
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_95() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_134()) {
-    jj_scanpos = xsp;
-    if (jj_3R_135()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3_3() {
-    if (jj_3R_16()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_85() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_119()) {
-    jj_scanpos = xsp;
-    if (jj_3R_120()) return true;
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_121()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_84() {
-    if (jj_scan_token(DOUBLE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_236() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_240()) {
-    jj_scanpos = xsp;
-    if (jj_3R_241()) return true;
-    }
-    if (jj_3R_229()) return true;
-    return false;
-  }
-
-  private boolean jj_3_2() {
-    if (jj_3R_15()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_83() {
-    if (jj_scan_token(FLOAT)) return true;
-    return false;
-  }
-
-  private boolean jj_3_14() {
-    if (jj_3R_31()) return true;
-    return false;
-  }
-
-  private boolean jj_3_13() {
-    if (jj_3R_29()) return true;
-    if (jj_3R_30()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_141() {
-    if (jj_scan_token(63)) return true;
-    if (jj_3R_25()) return true;
-    return false;
-  }
-
-  private boolean jj_3_1() {
-    if (jj_3R_14()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_229() {
-    if (jj_3R_235()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_236()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_118() {
-    if (jj_scan_token(LONG)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_52() {
-    if (jj_scan_token(CASE)) return true;
-    if (jj_3R_106()) return true;
-    if (jj_scan_token(64)) return true;
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_140() {
-    if (jj_3R_124()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_143() {
-    if (jj_3R_29()) return true;
-    if (jj_3R_30()) return true;
-    if (jj_3R_105()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_82() {
-    if (jj_scan_token(LONG)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_118()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_100() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_140()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_141()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_96() {
-    if (jj_scan_token(59)) return true;
-    if (jj_3R_95()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_51() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_scan_token(64)) return true;
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_81() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_105() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_143()) {
-    jj_scanpos = xsp;
-    if (jj_3_14()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_35() {
-    if (jj_3R_95()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_96()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_117() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_26() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_51()) {
-    jj_scanpos = xsp;
-    if (jj_3R_52()) {
-    jj_scanpos = xsp;
-    if (jj_3R_53()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_238() {
-    if (jj_scan_token(90)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_80() {
-    if (jj_scan_token(SHORT)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_117()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_237() {
-    if (jj_scan_token(89)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_79() {
-    if (jj_scan_token(CHAR)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_78() {
-    if (jj_scan_token(VOID)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_101() {
-    if (jj_scan_token(59)) return true;
-    if (jj_3R_100()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_230() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_237()) {
-    jj_scanpos = xsp;
-    if (jj_3R_238()) return true;
-    }
-    if (jj_3R_221()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_184() {
-    if (jj_scan_token(59)) return true;
-    if (jj_3R_105()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_77() {
-    if (jj_scan_token(CONST)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_127() {
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_116()) return true;
-    if (jj_scan_token(56)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_41() {
-    if (jj_3R_100()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_101()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_221() {
-    if (jj_3R_229()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_230()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_116() {
-    if (jj_3R_105()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_184()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_32() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_77()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    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()) {
-    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()) {
-    jj_scanpos = xsp;
-    if (jj_3R_87()) {
-    jj_scanpos = xsp;
-    if (jj_3R_88()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_89()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_90()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_126() {
-    if (jj_3R_170()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_125() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_93() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_125()) {
-    jj_scanpos = xsp;
-    if (jj_3R_126()) {
-    jj_scanpos = xsp;
-    if (jj_3R_127()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_59() {
-    if (jj_3R_110()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_58() {
-    if (jj_3R_109()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_57() {
-    if (jj_3R_108()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_46() {
-    if (jj_3R_103()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_228() {
-    if (jj_3R_116()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_56() {
-    if (jj_3R_98()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_234() {
-    if (jj_scan_token(88)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_22() {
-    Token xsp;
-    if (jj_3R_46()) return true;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_46()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_55() {
-    if (jj_3R_107()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_233() {
-    if (jj_scan_token(87)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_153() {
-    if (jj_scan_token(RETURN)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_228()) jj_scanpos = xsp;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3_10() {
-    if (jj_3R_26()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_232() {
-    if (jj_scan_token(86)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_133() {
-    if (jj_scan_token(96)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_231() {
-    if (jj_scan_token(85)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_152() {
-    if (jj_scan_token(BREAK)) return true;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_45() {
-    if (jj_scan_token(UNION)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_132() {
-    if (jj_scan_token(95)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_28() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_10()) {
-    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()) return true;
-    }
-    }
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_44() {
-    if (jj_scan_token(STRUCT)) return true;
-    return false;
-  }
-
-  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_3R_217()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_151() {
-    if (jj_scan_token(CONTINUE)) return true;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_131() {
-    if (jj_scan_token(100)) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3_18() {
-    if (jj_3R_35()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_20() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_44()) {
-    jj_scanpos = xsp;
-    if (jj_3R_45()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_217() {
-    if (jj_3R_221()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_222()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_130() {
-    if (jj_scan_token(99)) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_150() {
-    if (jj_scan_token(GOTO)) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_171() {
-    if (jj_3R_35()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_169() {
-    if (jj_3R_106()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_110() {
-    Token xsp;
-    xsp = jj_scanpos;
-    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;
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_124() {
-    if (jj_scan_token(65)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_169()) jj_scanpos = xsp;
-    if (jj_scan_token(66)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_129() {
-    if (jj_scan_token(55)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_171()) jj_scanpos = xsp;
-    if (jj_scan_token(56)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_39() {
-    if (jj_3R_20()) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_224() {
-    if (jj_scan_token(84)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_128() {
-    if (jj_scan_token(65)) return true;
-    if (jj_3R_116()) return true;
-    if (jj_scan_token(66)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_139() {
-    if (jj_scan_token(REGISTER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_223() {
-    if (jj_scan_token(83)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_21() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_138() {
-    if (jj_scan_token(AUTO)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_94() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_128()) {
-    jj_scanpos = xsp;
-    if (jj_3R_129()) {
-    jj_scanpos = xsp;
-    if (jj_3R_130()) {
-    jj_scanpos = xsp;
-    if (jj_3R_131()) {
-    jj_scanpos = xsp;
-    if (jj_3R_132()) {
-    jj_scanpos = xsp;
-    if (jj_3R_133()) return true;
-    }
-    }
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_99() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_138()) {
-    jj_scanpos = xsp;
-    if (jj_3R_139()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_34() {
-    if (jj_3R_93()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_94()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3_7() {
-    if (jj_3R_20()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_21()) jj_scanpos = xsp;
-    if (jj_scan_token(61)) return true;
-    if (jj_3R_22()) return true;
-    if (jj_scan_token(62)) return true;
-    return false;
-  }
-
-  private boolean jj_3_9() {
-    if (jj_scan_token(59)) return true;
-    if (jj_3R_25()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_218() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_223()) {
-    jj_scanpos = xsp;
-    if (jj_3R_224()) return true;
-    }
-    if (jj_3R_211()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_40() {
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_99()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_15() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_7()) {
-    jj_scanpos = xsp;
-    if (jj_3R_39()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_209() {
-    if (jj_3R_25()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_9()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_211() {
-    if (jj_3R_217()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_218()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_227() {
-    if (jj_3R_116()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_54() {
-    if (jj_scan_token(STATIC)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_226() {
-    if (jj_3R_116()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_210() {
-    if (jj_scan_token(59)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_27() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_54()) jj_scanpos = xsp;
-    if (jj_3R_16()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_225() {
-    if (jj_3R_116()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_212() {
-    if (jj_scan_token(82)) return true;
-    if (jj_3R_200()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_197() {
-    if (jj_3R_124()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_50() {
-    if (jj_scan_token(61)) return true;
-    if (jj_3R_209()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_210()) jj_scanpos = xsp;
-    if (jj_scan_token(62)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_196() {
-    if (jj_3R_123()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_200() {
-    if (jj_3R_211()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_212()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_49() {
-    if (jj_3R_105()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_195() {
-    if (jj_3R_122()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_159() {
-    if (jj_scan_token(98)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_149() {
-    if (jj_scan_token(FOR)) return true;
-    if (jj_scan_token(55)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_225()) jj_scanpos = xsp;
-    if (jj_scan_token(57)) return true;
-    xsp = jj_scanpos;
-    if (jj_3R_226()) jj_scanpos = xsp;
-    if (jj_scan_token(57)) return true;
-    xsp = jj_scanpos;
-    if (jj_3R_227()) jj_scanpos = xsp;
-    if (jj_scan_token(56)) return true;
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_194() {
-    if (jj_3R_15()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_220() {
-    if (jj_scan_token(LONG)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_158() {
-    if (jj_scan_token(97)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_16() {
-    if (jj_3R_40()) return true;
-    if (jj_3R_32()) return true;
-    if (jj_3R_41()) return true;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_25() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_49()) {
-    jj_scanpos = xsp;
-    if (jj_3R_50()) return true;
-    }
-    return false;
-  }
-
-  private boolean jj_3R_157() {
-    if (jj_scan_token(92)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_156() {
-    if (jj_scan_token(91)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_216() {
-    if (jj_scan_token(LONG)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_220()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_155() {
-    if (jj_scan_token(58)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_215() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_154() {
-    if (jj_scan_token(82)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_219() {
-    if (jj_scan_token(INT)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_201() {
-    if (jj_scan_token(81)) return true;
-    if (jj_3R_176()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_148() {
-    if (jj_scan_token(DO)) return true;
-    if (jj_3R_28()) return true;
-    if (jj_scan_token(WHILE)) return true;
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_116()) return true;
-    if (jj_scan_token(56)) return true;
-    if (jj_scan_token(57)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_173() {
-    if (jj_3R_124()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_176() {
-    if (jj_3R_200()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_201()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_214() {
-    if (jj_scan_token(SHORT)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_219()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_111() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_154()) {
-    jj_scanpos = xsp;
-    if (jj_3R_155()) {
-    jj_scanpos = xsp;
-    if (jj_3R_156()) {
-    jj_scanpos = xsp;
-    if (jj_3R_157()) {
-    jj_scanpos = xsp;
-    if (jj_3R_158()) {
-    jj_scanpos = xsp;
-    if (jj_3R_159()) return true;
-    }
-    }
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_19() {
-    if (jj_3R_32()) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_173()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_213() {
-    if (jj_scan_token(CHAR)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_147() {
-    if (jj_scan_token(WHILE)) return true;
-    if (jj_scan_token(55)) return true;
-    if (jj_3R_116()) return true;
-    if (jj_scan_token(56)) return true;
-    if (jj_3R_28()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_206() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_213()) {
-    jj_scanpos = xsp;
-    if (jj_3R_214()) {
-    jj_scanpos = xsp;
-    if (jj_3R_215()) {
-    jj_scanpos = xsp;
-    if (jj_3R_216()) return true;
-    }
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_205() {
-    if (jj_scan_token(UNSIGNED)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_109() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_147()) {
-    jj_scanpos = xsp;
-    if (jj_3R_148()) {
-    jj_scanpos = xsp;
-    if (jj_3R_149()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_204() {
-    if (jj_scan_token(SIGNED)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_177() {
-    if (jj_scan_token(80)) return true;
-    if (jj_3R_160()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_136() {
-    if (jj_scan_token(59)) return true;
-    if (jj_scan_token(60)) return true;
-    return false;
-  }
-
-  private boolean jj_3_16() {
-    if (jj_3R_29()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_160() {
-    if (jj_3R_176()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_177()) jj_scanpos = xsp;
-    return false;
-  }
-
-  private boolean jj_3R_193() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_204()) {
-    jj_scanpos = xsp;
-    if (jj_3R_205()) return true;
-    }
-    xsp = jj_scanpos;
-    if (jj_3R_206()) jj_scanpos = xsp;
-    return false;
-  }
-
-  /** Generated Token Manager. */
-  public CParserTokenManager token_source;
-  SimpleCharStream jj_input_stream;
-  /** Current token. */
-  public Token token;
-  /** Next token. */
-  public Token jj_nt;
-  private int jj_ntk;
-  private Token jj_scanpos, jj_lastpos;
-  private int jj_la;
-  private int jj_gen;
-  final private int[] jj_la1 = new int[94];
-  static private int[] jj_la1_0;
-  static private int[] jj_la1_1;
-  static private int[] jj_la1_2;
-  static private int[] jj_la1_3;
-  static {
-      jj_la1_init_0();
-      jj_la1_init_1();
-      jj_la1_init_2();
-      jj_la1_init_3();
-   }
-   private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0xc5c00000,0x40000000,0x84800000,0x0,0x40000000,0x84800000,0x84800000,0x0,0x0,0x0,0x400000,0x400000,0x0,0x0,0x0,0x800000,0x0,0x0,0x0,0x0,0x84800000,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,0x0,0x0,0x0,0x84800000,0x0,0x0,0x0,0x80000000,0x80000000,0x84800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80d1000,0x80d1000,0x381d1000,0x2000000,0x80d1000,0xbedd1000,0x3a1d1000,0x10000000,0x80d1000,0x80d1000,0x80d1000,0x0,0x80d1000,0x20100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80d1000,0x0,0x8000000,0x0,0x0,0x0,0xd1000,0x0,0x8c8d1000,0xd1000,};
-   }
-   private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x127cf3,0x1,0x126cf2,0x22000000,0x1,0x126cf2,0x126cf2,0x8000000,0x0,0x1,0x1000,0x1000,0x20,0x20000,0x400,0x2,0x20000,0x400,0x24480,0x24480,0x126cd2,0x4000000,0x0,0x20,0x20000,0x400,0x2,0x20000,0x400,0x24480,0x24480,0x26cd2,0x4000000,0x0,0x100000,0x10,0x10,0x126cf2,0x8000000,0x0,0x80000000,0x0,0x0,0x100000,0x100000,0x100000,0x8000000,0x80000000,0x20,0x4000000,0x8000000,0x8000000,0x24900000,0x4900000,0x269d800c,0x100200,0x4900000,0x269ffeff,0x269d820c,0x40000,0x4900000,0x4900000,0x4900000,0x90004,0x4900000,0x8008,0x8000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4900000,0x800000,0x4000000,0x4000000,0x800000,0x800000,0x900000,0x8000000,0x4926cf2,0x0,};
-   }
-   private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98040000,0x98040000,0x98040000,0x0,0x98040000,0x98040000,0x98040000,0x0,0x98040000,0x98040000,0x98040000,0x0,0x98040000,0x0,0x0,0x1ff8,0x2000,0x4000,0x8000,0x10000,0x20000,0x40000,0x180000,0x180000,0x1e00000,0x1e00000,0x6000000,0x6000000,0x18000000,0x18000000,0x60000000,0x60000000,0x98040000,0x0,0x98040000,0x18040000,0x80000002,0x80000002,0x0,0x0,0x98040000,0x0,};
-   }
-   private static void jj_la1_init_3() {
-      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,0x7,0x0,0x7,0x7,0x7,0x0,0x7,0x7,0x7,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x7,0x6,0x19,0x19,0x0,0x0,0x7,0x0,};
-   }
-  final private JJCalls[] jj_2_rtns = new JJCalls[18];
-  private boolean jj_rescan = false;
-  private int jj_gc = 0;
-
-  /** Constructor with InputStream. */
-  public GNUnetParser(java.io.InputStream stream) {
-     this(stream, null);
-  }
-  /** Constructor with InputStream and supplied encoding */
-  public GNUnetParser(java.io.InputStream stream, String encoding) {
-    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
-    token_source = new CParserTokenManager(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream stream) {
-     ReInit(stream, null);
-  }
-  /** Reinitialise. */
-  public void ReInit(java.io.InputStream stream, String encoding) {
-    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
-    token_source.ReInit(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  /** Constructor. */
-  public GNUnetParser(java.io.Reader stream) {
-    jj_input_stream = new SimpleCharStream(stream, 1, 1);
-    token_source = new CParserTokenManager(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  /** Reinitialise. */
-  public void ReInit(java.io.Reader stream) {
-    jj_input_stream.ReInit(stream, 1, 1);
-    token_source.ReInit(jj_input_stream);
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  /** Constructor with generated Token Manager. */
-  public GNUnetParser(CParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  /** Reinitialise. */
-  public void ReInit(CParserTokenManager tm) {
-    token_source = tm;
-    token = new Token();
-    jj_ntk = -1;
-    jj_gen = 0;
-    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
-  }
-
-  private Token jj_consume_token(int kind) throws ParseException {
-    Token oldToken;
-    if ((oldToken = token).next != null) token = token.next;
-    else token = token.next = token_source.getNextToken();
-    jj_ntk = -1;
-    if (token.kind == kind) {
-      jj_gen++;
-      if (++jj_gc > 100) {
-        jj_gc = 0;
-        for (int i = 0; i < jj_2_rtns.length; i++) {
-          JJCalls c = jj_2_rtns[i];
-          while (c != null) {
-            if (c.gen < jj_gen) c.first = null;
-            c = c.next;
-          }
-        }
-      }
-      return token;
-    }
-    token = oldToken;
-    jj_kind = kind;
-    throw generateParseException();
-  }
-
-  static private final class LookaheadSuccess extends java.lang.Error { }
-  final private LookaheadSuccess jj_ls = new LookaheadSuccess();
-  private boolean jj_scan_token(int kind) {
-    if (jj_scanpos == jj_lastpos) {
-      jj_la--;
-      if (jj_scanpos.next == null) {
-        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
-      } else {
-        jj_lastpos = jj_scanpos = jj_scanpos.next;
-      }
-    } else {
-      jj_scanpos = jj_scanpos.next;
-    }
-    if (jj_rescan) {
-      int i = 0; Token tok = token;
-      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
-      if (tok != null) jj_add_error_token(kind, i);
-    }
-    if (jj_scanpos.kind != kind) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
-    return false;
-  }
-
-
-/** Get the next Token. */
-  final public Token getNextToken() {
-    if (token.next != null) token = token.next;
-    else token = token.next = token_source.getNextToken();
-    jj_ntk = -1;
-    jj_gen++;
-    return token;
-  }
-
-/** Get the specific Token. */
-  final public Token getToken(int index) {
-    Token t = token;
-    for (int i = 0; i < index; i++) {
-      if (t.next != null) t = t.next;
-      else t = t.next = token_source.getNextToken();
-    }
-    return t;
-  }
-
-  private int jj_ntk() {
-    if ((jj_nt=token.next) == null)
-      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
-    else
-      return (jj_ntk = jj_nt.kind);
-  }
-
-  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
-  private int[] jj_expentry;
-  private int jj_kind = -1;
-  private int[] jj_lasttokens = new int[100];
-  private int jj_endpos;
-
-  private void jj_add_error_token(int kind, int pos) {
-    if (pos >= 100) return;
-    if (pos == jj_endpos + 1) {
-      jj_lasttokens[jj_endpos++] = kind;
-    } else if (jj_endpos != 0) {
-      jj_expentry = new int[jj_endpos];
-      for (int i = 0; i < jj_endpos; i++) {
-        jj_expentry[i] = jj_lasttokens[i];
-      }
-      jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
-        int[] oldentry = (int[])(it.next());
-        if (oldentry.length == jj_expentry.length) {
-          for (int i = 0; i < jj_expentry.length; i++) {
-            if (oldentry[i] != jj_expentry[i]) {
-              continue jj_entries_loop;
-            }
-          }
-          jj_expentries.add(jj_expentry);
-          break jj_entries_loop;
-        }
-      }
-      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
-    }
-  }
-
-  /** Generate ParseException. */
-  public ParseException generateParseException() {
-    jj_expentries.clear();
-    boolean[] la1tokens = new boolean[101];
-    if (jj_kind >= 0) {
-      la1tokens[jj_kind] = true;
-      jj_kind = -1;
-    }
-    for (int i = 0; i < 94; i++) {
-      if (jj_la1[i] == jj_gen) {
-        for (int j = 0; j < 32; j++) {
-          if ((jj_la1_0[i] & (1<<j)) != 0) {
-            la1tokens[j] = true;
-          }
-          if ((jj_la1_1[i] & (1<<j)) != 0) {
-            la1tokens[32+j] = true;
-          }
-          if ((jj_la1_2[i] & (1<<j)) != 0) {
-            la1tokens[64+j] = true;
-          }
-          if ((jj_la1_3[i] & (1<<j)) != 0) {
-            la1tokens[96+j] = true;
-          }
-        }
-      }
-    }
-    for (int i = 0; i < 101; i++) {
-      if (la1tokens[i]) {
-        jj_expentry = new int[1];
-        jj_expentry[0] = i;
-        jj_expentries.add(jj_expentry);
-      }
-    }
-    jj_endpos = 0;
-    jj_rescan_token();
-    jj_add_error_token(0, 0);
-    int[][] exptokseq = new int[jj_expentries.size()][];
-    for (int i = 0; i < jj_expentries.size(); i++) {
-      exptokseq[i] = jj_expentries.get(i);
-    }
-    return new ParseException(token, exptokseq, tokenImage);
-  }
-
-  /** Enable tracing. */
-  final public void enable_tracing() {
-  }
-
-  /** Disable tracing. */
-  final public void disable_tracing() {
-  }
-
-  private void jj_rescan_token() {
-    jj_rescan = true;
-    for (int i = 0; i < 18; i++) {
-    try {
-      JJCalls p = jj_2_rtns[i];
-      do {
-        if (p.gen > jj_gen) {
-          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
-          switch (i) {
-            case 0: jj_3_1(); break;
-            case 1: jj_3_2(); break;
-            case 2: jj_3_3(); break;
-            case 3: jj_3_4(); break;
-            case 4: jj_3_5(); break;
-            case 5: jj_3_6(); break;
-            case 6: jj_3_7(); break;
-            case 7: jj_3_8(); break;
-            case 8: jj_3_9(); break;
-            case 9: jj_3_10(); break;
-            case 10: jj_3_11(); break;
-            case 11: jj_3_12(); break;
-            case 12: jj_3_13(); break;
-            case 13: jj_3_14(); break;
-            case 14: jj_3_15(); break;
-            case 15: jj_3_16(); break;
-            case 16: jj_3_17(); break;
-            case 17: jj_3_18(); break;
-          }
-        }
-        p = p.next;
-      } while (p != null);
-      } catch(LookaheadSuccess ls) { }
-    }
-    jj_rescan = false;
-  }
-
-  private void jj_save(int index, int xla) {
-    JJCalls p = jj_2_rtns[index];
-    while (p.gen > jj_gen) {
-      if (p.next == null) { p = p.next = new JJCalls(); break; }
-      p = p.next;
-    }
-    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
-  }
-
-  static final class JJCalls {
-    int gen;
-    Token first;
-    int arg;
-    JJCalls next;
-  }
-
-}
-
-class JTBToolkit {
-   static NodeToken makeNodeToken(Token t) {
-      return new NodeToken(t.image.intern(), t.kind, t.beginLine, t.beginColumn, t.endLine, t.endColumn);
-   }
-}
diff --git a/contrib/gnunet-tree-builder/gtb b/contrib/gnunet-tree-builder/gtb
deleted file mode 100755 (executable)
index d57dfdc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-# gtb: gnunet tree builder
-# Script for automating the generation of GNUnet syntax tree
-# MAINDIR: GNUnet workspace
-
-$MAINDIR/contrib/gnunet-tree-builder/regenerate
\ No newline at end of file
diff --git a/contrib/gnunet-tree-builder/regenerate b/contrib/gnunet-tree-builder/regenerate
deleted file mode 100755 (executable)
index fd5696a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-# MAINDIR: Environment Variable for GNUnet workspace
-# Note: The script will generate the grammar file C.out.jj under src/monkey
-                                                                                                                                                                                    
-rm -f *.java
-mkdir -p org/gnunet/monkey/parser
-cd org/gnunet/monkey/parser                                                                                                                                                                                 
-jtb -printer -jd -np org.gnunet.monkey.parser.nodes -vp org.gnunet.monkey.parser.visitors -o $MAINDIR/src/monkey/C.out.jj $MAINDIR/src/monkey/C.jj                                              
-javacc -STATIC=false $MAINDIR/src/monkey/C.out.jj
-
-echo 'package org.gnunet.monkey.parser;' > PACKAGE
-for n in *.java
-do
- cat $n >> PACKAGE
- mv PACKAGE $n
- echo 'package org.gnunet.monkey.parser;' > PACKAGE
-done
-
-rm -f PACKAGE
-                                                                                                                                
\ No newline at end of file
diff --git a/contrib/jtb.jar b/contrib/jtb.jar
new file mode 100644 (file)
index 0000000..f10eb00
Binary files /dev/null and b/contrib/jtb.jar differ
diff --git a/contrib/sqljet.1.0.3.b914.jar b/contrib/sqljet.1.0.3.b914.jar
new file mode 100644 (file)
index 0000000..0b76cc1
Binary files /dev/null and b/contrib/sqljet.1.0.3.b914.jar differ
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/CParserConstants.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/CParserConstants.java
new file mode 100644 (file)
index 0000000..44bd0d4
--- /dev/null
@@ -0,0 +1,209 @@
+package org.gnunet.seaspider.parser;
+/* Generated By:JavaCC: Do not edit this line. CParserConstants.java */
+
+/**
+ * Token literal values and constants.
+ * Generated by org.javacc.parser.OtherFilesGen#start()
+ */
+public interface CParserConstants {
+
+  /** End of File. */
+  int EOF = 0;
+  /** RegularExpression Id. */
+  int INTEGER_LITERAL = 12;
+  /** RegularExpression Id. */
+  int DECIMAL_LITERAL = 13;
+  /** RegularExpression Id. */
+  int HEX_LITERAL = 14;
+  /** RegularExpression Id. */
+  int OCTAL_LITERAL = 15;
+  /** RegularExpression Id. */
+  int FLOATING_POINT_LITERAL = 16;
+  /** RegularExpression Id. */
+  int EXPONENT = 17;
+  /** RegularExpression Id. */
+  int CHARACTER_LITERAL = 18;
+  /** RegularExpression Id. */
+  int STRING_LITERAL = 19;
+  /** RegularExpression Id. */
+  int CONTINUE = 20;
+  /** RegularExpression Id. */
+  int VOLATILE = 21;
+  /** RegularExpression Id. */
+  int REGISTER = 22;
+  /** RegularExpression Id. */
+  int UNSIGNED = 23;
+  /** RegularExpression Id. */
+  int TYPEDEF = 24;
+  /** RegularExpression Id. */
+  int DFLT = 25;
+  /** RegularExpression Id. */
+  int DOUBLE = 26;
+  /** RegularExpression Id. */
+  int SIZEOF = 27;
+  /** RegularExpression Id. */
+  int SWITCH = 28;
+  /** RegularExpression Id. */
+  int RETURN = 29;
+  /** RegularExpression Id. */
+  int EXTERN = 30;
+  /** RegularExpression Id. */
+  int STRUCT = 31;
+  /** RegularExpression Id. */
+  int STATIC = 32;
+  /** RegularExpression Id. */
+  int SIGNED = 33;
+  /** RegularExpression Id. */
+  int WHILE = 34;
+  /** RegularExpression Id. */
+  int BREAK = 35;
+  /** RegularExpression Id. */
+  int UNION = 36;
+  /** RegularExpression Id. */
+  int CONST = 37;
+  /** RegularExpression Id. */
+  int FLOAT = 38;
+  /** RegularExpression Id. */
+  int SHORT = 39;
+  /** RegularExpression Id. */
+  int ELSE = 40;
+  /** RegularExpression Id. */
+  int CASE = 41;
+  /** RegularExpression Id. */
+  int LONG = 42;
+  /** RegularExpression Id. */
+  int ENUM = 43;
+  /** RegularExpression Id. */
+  int AUTO = 44;
+  /** RegularExpression Id. */
+  int VOID = 45;
+  /** RegularExpression Id. */
+  int CHAR = 46;
+  /** RegularExpression Id. */
+  int GOTO = 47;
+  /** RegularExpression Id. */
+  int FOR = 48;
+  /** RegularExpression Id. */
+  int INT = 49;
+  /** RegularExpression Id. */
+  int IF = 50;
+  /** RegularExpression Id. */
+  int DO = 51;
+  /** RegularExpression Id. */
+  int IDENTIFIER = 52;
+  /** RegularExpression Id. */
+  int LETTER = 53;
+  /** RegularExpression Id. */
+  int DIGIT = 54;
+
+  /** Lexical state. */
+  int DEFAULT = 0;
+  /** Lexical state. */
+  int PREPROCESSOR_OUTPUT = 1;
+
+  /** Literal token values. */
+  String[] tokenImage = {
+    "<EOF>",
+    "\" \"",
+    "\"\\t\"",
+    "\"\\n\"",
+    "\"\\r\"",
+    "<token of kind 5>",
+    "<token of kind 6>",
+    "\"#\"",
+    "\"\\n\"",
+    "\"\\\\\\n\"",
+    "\"\\\\\\r\\n\"",
+    "<token of kind 11>",
+    "<INTEGER_LITERAL>",
+    "<DECIMAL_LITERAL>",
+    "<HEX_LITERAL>",
+    "<OCTAL_LITERAL>",
+    "<FLOATING_POINT_LITERAL>",
+    "<EXPONENT>",
+    "<CHARACTER_LITERAL>",
+    "<STRING_LITERAL>",
+    "\"continue\"",
+    "\"volatile\"",
+    "\"register\"",
+    "\"unsigned\"",
+    "\"typedef\"",
+    "\"default\"",
+    "\"double\"",
+    "\"sizeof\"",
+    "\"switch\"",
+    "\"return\"",
+    "\"extern\"",
+    "\"struct\"",
+    "\"static\"",
+    "\"signed\"",
+    "\"while\"",
+    "\"break\"",
+    "\"union\"",
+    "\"const\"",
+    "\"float\"",
+    "\"short\"",
+    "\"else\"",
+    "\"case\"",
+    "\"long\"",
+    "\"enum\"",
+    "\"auto\"",
+    "\"void\"",
+    "\"char\"",
+    "\"goto\"",
+    "\"for\"",
+    "\"int\"",
+    "\"if\"",
+    "\"do\"",
+    "<IDENTIFIER>",
+    "<LETTER>",
+    "<DIGIT>",
+    "\"(\"",
+    "\")\"",
+    "\";\"",
+    "\"*\"",
+    "\",\"",
+    "\"...\"",
+    "\"{\"",
+    "\"}\"",
+    "\"=\"",
+    "\":\"",
+    "\"[\"",
+    "\"]\"",
+    "\"*=\"",
+    "\"/=\"",
+    "\"%=\"",
+    "\"+=\"",
+    "\"-=\"",
+    "\"<<=\"",
+    "\">>=\"",
+    "\"&=\"",
+    "\"^=\"",
+    "\"|=\"",
+    "\"?\"",
+    "\"||\"",
+    "\"&&\"",
+    "\"|\"",
+    "\"^\"",
+    "\"&\"",
+    "\"==\"",
+    "\"!=\"",
+    "\"<\"",
+    "\">\"",
+    "\"<=\"",
+    "\">=\"",
+    "\"<<\"",
+    "\">>\"",
+    "\"+\"",
+    "\"-\"",
+    "\"/\"",
+    "\"%\"",
+    "\"++\"",
+    "\"--\"",
+    "\"~\"",
+    "\"!\"",
+    "\".\"",
+    "\"->\"",
+  };
+
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/CParserTokenManager.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/CParserTokenManager.java
new file mode 100644 (file)
index 0000000..41930bf
--- /dev/null
@@ -0,0 +1,1413 @@
+package org.gnunet.seaspider.parser;
+/* Generated By:JavaCC: Do not edit this line. CParserTokenManager.java */
+import java.util.*;
+
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.Vector;
+
+/** Token Manager. */
+public class CParserTokenManager implements CParserConstants
+{
+
+  /** Debug output. */
+  public  java.io.PrintStream debugStream = System.out;
+  /** Set debug output. */
+  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active1 & 0x20000010L) != 0L)
+            return 65;
+         if ((active0 & 0xffffffff00000L) != 0L)
+         {
+            jjmatchedKind = 52;
+            return 42;
+         }
+         if ((active0 & 0x1000000000000000L) != 0L || (active1 & 0x800000000L) != 0L)
+            return 5;
+         return -1;
+      case 1:
+         if ((active0 & 0xc000004000000L) != 0L)
+            return 42;
+         if ((active0 & 0x3fffffbf00000L) != 0L)
+         {
+            if (jjmatchedPos != 1)
+            {
+               jjmatchedKind = 52;
+               jjmatchedPos = 1;
+            }
+            return 42;
+         }
+         return -1;
+      case 2:
+         if ((active0 & 0xfffffff00000L) != 0L)
+         {
+            jjmatchedKind = 52;
+            jjmatchedPos = 2;
+            return 42;
+         }
+         if ((active0 & 0x3000000000000L) != 0L)
+            return 42;
+         return -1;
+      case 3:
+         if ((active0 & 0xfffff00000L) != 0L)
+         {
+            jjmatchedKind = 52;
+            jjmatchedPos = 3;
+            return 42;
+         }
+         if ((active0 & 0xff0000000000L) != 0L)
+            return 42;
+         return -1;
+      case 4:
+         if ((active0 & 0x3fff00000L) != 0L)
+         {
+            jjmatchedKind = 52;
+            jjmatchedPos = 4;
+            return 42;
+         }
+         if ((active0 & 0xfc00000000L) != 0L)
+            return 42;
+         return -1;
+      case 5:
+         if ((active0 & 0x3fc000000L) != 0L)
+            return 42;
+         if ((active0 & 0x3f00000L) != 0L)
+         {
+            jjmatchedKind = 52;
+            jjmatchedPos = 5;
+            return 42;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0xf00000L) != 0L)
+         {
+            jjmatchedKind = 52;
+            jjmatchedPos = 6;
+            return 42;
+         }
+         if ((active0 & 0x3000000L) != 0L)
+            return 42;
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_0(int pos, long active0, long active1)
+{
+   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1), pos + 1);
+}
+private int jjStopAtPos(int pos, int kind)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   return pos + 1;
+}
+private int jjMoveStringLiteralDfa0_0()
+{
+   switch(curChar)
+   {
+      case 33:
+         jjmatchedKind = 98;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x100000L);
+      case 35:
+         return jjStopAtPos(0, 7);
+      case 37:
+         jjmatchedKind = 94;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x20L);
+      case 38:
+         jjmatchedKind = 82;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x8400L);
+      case 40:
+         return jjStopAtPos(0, 55);
+      case 41:
+         return jjStopAtPos(0, 56);
+      case 42:
+         jjmatchedKind = 58;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x8L);
+      case 43:
+         jjmatchedKind = 91;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x80000040L);
+      case 44:
+         return jjStopAtPos(0, 59);
+      case 45:
+         jjmatchedKind = 92;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x1100000080L);
+      case 46:
+         jjmatchedKind = 99;
+         return jjMoveStringLiteralDfa1_0(0x1000000000000000L, 0x0L);
+      case 47:
+         jjmatchedKind = 93;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x10L);
+      case 58:
+         return jjStopAtPos(0, 64);
+      case 59:
+         return jjStopAtPos(0, 57);
+      case 60:
+         jjmatchedKind = 85;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x2800100L);
+      case 61:
+         jjmatchedKind = 63;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x80000L);
+      case 62:
+         jjmatchedKind = 86;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x5000200L);
+      case 63:
+         return jjStopAtPos(0, 77);
+      case 91:
+         return jjStopAtPos(0, 65);
+      case 93:
+         return jjStopAtPos(0, 66);
+      case 94:
+         jjmatchedKind = 81;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x800L);
+      case 97:
+         return jjMoveStringLiteralDfa1_0(0x100000000000L, 0x0L);
+      case 98:
+         return jjMoveStringLiteralDfa1_0(0x800000000L, 0x0L);
+      case 99:
+         return jjMoveStringLiteralDfa1_0(0x422000100000L, 0x0L);
+      case 100:
+         return jjMoveStringLiteralDfa1_0(0x8000006000000L, 0x0L);
+      case 101:
+         return jjMoveStringLiteralDfa1_0(0x90040000000L, 0x0L);
+      case 102:
+         return jjMoveStringLiteralDfa1_0(0x1004000000000L, 0x0L);
+      case 103:
+         return jjMoveStringLiteralDfa1_0(0x800000000000L, 0x0L);
+      case 105:
+         return jjMoveStringLiteralDfa1_0(0x6000000000000L, 0x0L);
+      case 108:
+         return jjMoveStringLiteralDfa1_0(0x40000000000L, 0x0L);
+      case 114:
+         return jjMoveStringLiteralDfa1_0(0x20400000L, 0x0L);
+      case 115:
+         return jjMoveStringLiteralDfa1_0(0x8398000000L, 0x0L);
+      case 116:
+         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x0L);
+      case 117:
+         return jjMoveStringLiteralDfa1_0(0x1000800000L, 0x0L);
+      case 118:
+         return jjMoveStringLiteralDfa1_0(0x200000200000L, 0x0L);
+      case 119:
+         return jjMoveStringLiteralDfa1_0(0x400000000L, 0x0L);
+      case 123:
+         return jjStopAtPos(0, 61);
+      case 124:
+         jjmatchedKind = 80;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x5000L);
+      case 125:
+         return jjStopAtPos(0, 62);
+      case 126:
+         return jjStopAtPos(0, 97);
+      default :
+         return jjMoveNfa_0(0, 0);
+   }
+}
+private int jjMoveStringLiteralDfa1_0(long active0, long active1)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(0, active0, active1);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 38:
+         if ((active1 & 0x8000L) != 0L)
+            return jjStopAtPos(1, 79);
+         break;
+      case 43:
+         if ((active1 & 0x80000000L) != 0L)
+            return jjStopAtPos(1, 95);
+         break;
+      case 45:
+         if ((active1 & 0x100000000L) != 0L)
+            return jjStopAtPos(1, 96);
+         break;
+      case 46:
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000000L, active1, 0L);
+      case 60:
+         if ((active1 & 0x2000000L) != 0L)
+         {
+            jjmatchedKind = 89;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x100L);
+      case 61:
+         if ((active1 & 0x8L) != 0L)
+            return jjStopAtPos(1, 67);
+         else if ((active1 & 0x10L) != 0L)
+            return jjStopAtPos(1, 68);
+         else if ((active1 & 0x20L) != 0L)
+            return jjStopAtPos(1, 69);
+         else if ((active1 & 0x40L) != 0L)
+            return jjStopAtPos(1, 70);
+         else if ((active1 & 0x80L) != 0L)
+            return jjStopAtPos(1, 71);
+         else if ((active1 & 0x400L) != 0L)
+            return jjStopAtPos(1, 74);
+         else if ((active1 & 0x800L) != 0L)
+            return jjStopAtPos(1, 75);
+         else if ((active1 & 0x1000L) != 0L)
+            return jjStopAtPos(1, 76);
+         else if ((active1 & 0x80000L) != 0L)
+            return jjStopAtPos(1, 83);
+         else if ((active1 & 0x100000L) != 0L)
+            return jjStopAtPos(1, 84);
+         else if ((active1 & 0x800000L) != 0L)
+            return jjStopAtPos(1, 87);
+         else if ((active1 & 0x1000000L) != 0L)
+            return jjStopAtPos(1, 88);
+         break;
+      case 62:
+         if ((active1 & 0x4000000L) != 0L)
+         {
+            jjmatchedKind = 90;
+            jjmatchedPos = 1;
+         }
+         else if ((active1 & 0x1000000000L) != 0L)
+            return jjStopAtPos(1, 100);
+         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200L);
+      case 97:
+         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000L, active1, 0L);
+      case 101:
+         return jjMoveStringLiteralDfa2_0(active0, 0x22400000L, active1, 0L);
+      case 102:
+         if ((active0 & 0x4000000000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 50, 42);
+         break;
+      case 104:
+         return jjMoveStringLiteralDfa2_0(active0, 0x408400000000L, active1, 0L);
+      case 105:
+         return jjMoveStringLiteralDfa2_0(active0, 0x208000000L, active1, 0L);
+      case 108:
+         return jjMoveStringLiteralDfa2_0(active0, 0x14000000000L, active1, 0L);
+      case 110:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2081000800000L, active1, 0L);
+      case 111:
+         if ((active0 & 0x8000000000000L) != 0L)
+         {
+            jjmatchedKind = 51;
+            jjmatchedPos = 1;
+         }
+         return jjMoveStringLiteralDfa2_0(active0, 0x1a42004300000L, active1, 0L);
+      case 114:
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000000L, active1, 0L);
+      case 116:
+         return jjMoveStringLiteralDfa2_0(active0, 0x180000000L, active1, 0L);
+      case 117:
+         return jjMoveStringLiteralDfa2_0(active0, 0x100000000000L, active1, 0L);
+      case 119:
+         return jjMoveStringLiteralDfa2_0(active0, 0x10000000L, active1, 0L);
+      case 120:
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0L);
+      case 121:
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000000L, active1, 0L);
+      case 124:
+         if ((active1 & 0x4000L) != 0L)
+            return jjStopAtPos(1, 78);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(0, active0, active1);
+}
+private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1)
+{
+   if (((active0 &= old0) | (active1 &= old1)) == 0L)
+      return jjStartNfa_0(0, old0, old1);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(1, active0, active1);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 46:
+         if ((active0 & 0x1000000000000000L) != 0L)
+            return jjStopAtPos(2, 60);
+         break;
+      case 61:
+         if ((active1 & 0x100L) != 0L)
+            return jjStopAtPos(2, 72);
+         else if ((active1 & 0x200L) != 0L)
+            return jjStopAtPos(2, 73);
+         break;
+      case 97:
+         return jjMoveStringLiteralDfa3_0(active0, 0x400100000000L, active1, 0L);
+      case 101:
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000000L, active1, 0L);
+      case 102:
+         return jjMoveStringLiteralDfa3_0(active0, 0x2000000L, active1, 0L);
+      case 103:
+         return jjMoveStringLiteralDfa3_0(active0, 0x200400000L, active1, 0L);
+      case 105:
+         return jjMoveStringLiteralDfa3_0(active0, 0x201410000000L, active1, 0L);
+      case 108:
+         return jjMoveStringLiteralDfa3_0(active0, 0x200000L, active1, 0L);
+      case 110:
+         return jjMoveStringLiteralDfa3_0(active0, 0x42000100000L, active1, 0L);
+      case 111:
+         return jjMoveStringLiteralDfa3_0(active0, 0xc000000000L, active1, 0L);
+      case 112:
+         return jjMoveStringLiteralDfa3_0(active0, 0x1000000L, active1, 0L);
+      case 114:
+         if ((active0 & 0x1000000000000L) != 0L)
+            return jjStartNfaWithStates_0(2, 48, 42);
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000000L, active1, 0L);
+      case 115:
+         return jjMoveStringLiteralDfa3_0(active0, 0x30000800000L, active1, 0L);
+      case 116:
+         if ((active0 & 0x2000000000000L) != 0L)
+            return jjStartNfaWithStates_0(2, 49, 42);
+         return jjMoveStringLiteralDfa3_0(active0, 0x900060000000L, active1, 0L);
+      case 117:
+         return jjMoveStringLiteralDfa3_0(active0, 0x80004000000L, active1, 0L);
+      case 122:
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000000L, active1, 0L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(1, active0, active1);
+}
+private int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1)
+{
+   if (((active0 &= old0) | (active1 &= old1)) == 0L)
+      return jjStartNfa_0(1, old0, old1);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(2, active0, 0L);
+      return 3;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa4_0(active0, 0x4802200000L);
+      case 98:
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000000L);
+      case 100:
+         if ((active0 & 0x200000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 45, 42);
+         break;
+      case 101:
+         if ((active0 & 0x10000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 40, 42);
+         else if ((active0 & 0x20000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 41, 42);
+         return jjMoveStringLiteralDfa4_0(active0, 0x49000000L);
+      case 103:
+         if ((active0 & 0x40000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 42, 42);
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa4_0(active0, 0xc00000L);
+      case 108:
+         return jjMoveStringLiteralDfa4_0(active0, 0x400000000L);
+      case 109:
+         if ((active0 & 0x80000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 43, 42);
+         break;
+      case 110:
+         return jjMoveStringLiteralDfa4_0(active0, 0x200000000L);
+      case 111:
+         if ((active0 & 0x100000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 44, 42);
+         else if ((active0 & 0x800000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 47, 42);
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000000000L);
+      case 114:
+         if ((active0 & 0x400000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 46, 42);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L);
+      case 115:
+         return jjMoveStringLiteralDfa4_0(active0, 0x2000000000L);
+      case 116:
+         return jjMoveStringLiteralDfa4_0(active0, 0x110100000L);
+      case 117:
+         return jjMoveStringLiteralDfa4_0(active0, 0xa0000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(2, active0, 0L);
+}
+private int jjMoveStringLiteralDfa4_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(2, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(3, active0, 0L);
+      return 4;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa5_0(active0, 0x90000000L);
+      case 100:
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000000L);
+      case 101:
+         if ((active0 & 0x400000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 34, 42);
+         return jjMoveStringLiteralDfa5_0(active0, 0x200000000L);
+      case 103:
+         return jjMoveStringLiteralDfa5_0(active0, 0x800000L);
+      case 105:
+         return jjMoveStringLiteralDfa5_0(active0, 0x100100000L);
+      case 107:
+         if ((active0 & 0x800000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 35, 42);
+         break;
+      case 108:
+         return jjMoveStringLiteralDfa5_0(active0, 0x4000000L);
+      case 110:
+         if ((active0 & 0x1000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 36, 42);
+         break;
+      case 111:
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000000L);
+      case 114:
+         return jjMoveStringLiteralDfa5_0(active0, 0x60000000L);
+      case 115:
+         return jjMoveStringLiteralDfa5_0(active0, 0x400000L);
+      case 116:
+         if ((active0 & 0x2000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 37, 42);
+         else if ((active0 & 0x4000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 38, 42);
+         else if ((active0 & 0x8000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 39, 42);
+         return jjMoveStringLiteralDfa5_0(active0, 0x200000L);
+      case 117:
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(3, active0, 0L);
+}
+private int jjMoveStringLiteralDfa5_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(3, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(4, active0, 0L);
+      return 5;
+   }
+   switch(curChar)
+   {
+      case 99:
+         if ((active0 & 0x100000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 32, 42);
+         break;
+      case 100:
+         if ((active0 & 0x200000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 33, 42);
+         break;
+      case 101:
+         if ((active0 & 0x4000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 26, 42);
+         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L);
+      case 102:
+         if ((active0 & 0x8000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 27, 42);
+         break;
+      case 104:
+         if ((active0 & 0x10000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 28, 42);
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa6_0(active0, 0x200000L);
+      case 108:
+         return jjMoveStringLiteralDfa6_0(active0, 0x2000000L);
+      case 110:
+         if ((active0 & 0x20000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 29, 42);
+         else if ((active0 & 0x40000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 30, 42);
+         return jjMoveStringLiteralDfa6_0(active0, 0x900000L);
+      case 116:
+         if ((active0 & 0x80000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 31, 42);
+         return jjMoveStringLiteralDfa6_0(active0, 0x400000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(4, active0, 0L);
+}
+private int jjMoveStringLiteralDfa6_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(4, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(5, active0, 0L);
+      return 6;
+   }
+   switch(curChar)
+   {
+      case 101:
+         return jjMoveStringLiteralDfa7_0(active0, 0xc00000L);
+      case 102:
+         if ((active0 & 0x1000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 24, 42);
+         break;
+      case 108:
+         return jjMoveStringLiteralDfa7_0(active0, 0x200000L);
+      case 116:
+         if ((active0 & 0x2000000L) != 0L)
+            return jjStartNfaWithStates_0(6, 25, 42);
+         break;
+      case 117:
+         return jjMoveStringLiteralDfa7_0(active0, 0x100000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(5, active0, 0L);
+}
+private int jjMoveStringLiteralDfa7_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(5, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(6, active0, 0L);
+      return 7;
+   }
+   switch(curChar)
+   {
+      case 100:
+         if ((active0 & 0x800000L) != 0L)
+            return jjStartNfaWithStates_0(7, 23, 42);
+         break;
+      case 101:
+         if ((active0 & 0x100000L) != 0L)
+            return jjStartNfaWithStates_0(7, 20, 42);
+         else if ((active0 & 0x200000L) != 0L)
+            return jjStartNfaWithStates_0(7, 21, 42);
+         break;
+      case 114:
+         if ((active0 & 0x400000L) != 0L)
+            return jjStartNfaWithStates_0(7, 22, 42);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(6, active0, 0L);
+}
+private int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_0(state, pos + 1);
+}
+static final long[] jjbitVec0 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+private int jjMoveNfa_0(int startState, int curPos)
+{
+   int startsAt = 0;
+   jjnewStateCnt = 76;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 65:
+                  if (curChar == 42)
+                     jjCheckNAddTwoStates(71, 72);
+                  else if (curChar == 47)
+                     jjCheckNAddStates(0, 2);
+                  break;
+               case 0:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(3, 9);
+                  else if (curChar == 47)
+                     jjAddStates(10, 11);
+                  else if (curChar == 36)
+                  {
+                     if (kind > 52)
+                        kind = 52;
+                     jjCheckNAdd(42);
+                  }
+                  else if (curChar == 34)
+                     jjCheckNAddStates(12, 14);
+                  else if (curChar == 39)
+                     jjAddStates(15, 16);
+                  else if (curChar == 46)
+                     jjCheckNAdd(5);
+                  if ((0x3fe000000000000L & l) != 0L)
+                  {
+                     if (kind > 12)
+                        kind = 12;
+                     jjCheckNAddTwoStates(1, 2);
+                  }
+                  else if (curChar == 48)
+                  {
+                     if (kind > 12)
+                        kind = 12;
+                     jjCheckNAddStates(17, 19);
+                  }
+                  break;
+               case 1:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(1, 2);
+                  break;
+               case 4:
+                  if (curChar == 46)
+                     jjCheckNAdd(5);
+                  break;
+               case 5:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 16)
+                     kind = 16;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 7:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(8);
+                  break;
+               case 8:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 16)
+                     kind = 16;
+                  jjCheckNAddTwoStates(8, 9);
+                  break;
+               case 10:
+                  if (curChar == 39)
+                     jjAddStates(15, 16);
+                  break;
+               case 11:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAdd(12);
+                  break;
+               case 12:
+                  if (curChar == 39 && kind > 18)
+                     kind = 18;
+                  break;
+               case 14:
+                  if ((0x8400000000L & l) != 0L)
+                     jjCheckNAdd(12);
+                  break;
+               case 15:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(16, 12);
+                  break;
+               case 16:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(12);
+                  break;
+               case 17:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 18;
+                  break;
+               case 18:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(16);
+                  break;
+               case 19:
+                  if (curChar == 34)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 20:
+                  if ((0xfffffffbffffdbffL & l) != 0L)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 22:
+                  if ((0x8400002400L & l) != 0L)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 23:
+                  if (curChar != 34)
+                     break;
+                  if (kind > 19)
+                     kind = 19;
+                  jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 24:
+                  if ((0x100002400L & l) != 0L)
+                     jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 25:
+                  if (curChar == 34)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 26:
+                  if ((0xfffffffbffffdbffL & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 28:
+                  if ((0x8400002400L & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 29:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(26, 29);
+                  break;
+               case 30:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 31:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 32;
+                  break;
+               case 32:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(30);
+                  break;
+               case 33:
+                  if (curChar == 10)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 34:
+                  if (curChar == 13)
+                     jjstateSet[jjnewStateCnt++] = 33;
+                  break;
+               case 35:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(30, 33);
+                  break;
+               case 36:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 37:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 38;
+                  break;
+               case 38:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(36);
+                  break;
+               case 39:
+                  if (curChar == 10)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 40:
+                  if (curChar == 13)
+                     jjstateSet[jjnewStateCnt++] = 39;
+                  break;
+               case 41:
+                  if (curChar != 36)
+                     break;
+                  if (kind > 52)
+                     kind = 52;
+                  jjCheckNAdd(42);
+                  break;
+               case 42:
+                  if ((0x3ff001000000000L & l) == 0L)
+                     break;
+                  if (kind > 52)
+                     kind = 52;
+                  jjCheckNAdd(42);
+                  break;
+               case 43:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(3, 9);
+                  break;
+               case 44:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(44, 45);
+                  break;
+               case 45:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 16)
+                     kind = 16;
+                  jjCheckNAddStates(34, 36);
+                  break;
+               case 46:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 16)
+                     kind = 16;
+                  jjCheckNAddStates(34, 36);
+                  break;
+               case 48:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(49);
+                  break;
+               case 49:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 16)
+                     kind = 16;
+                  jjCheckNAddTwoStates(49, 9);
+                  break;
+               case 50:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(50, 51);
+                  break;
+               case 52:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(53);
+                  break;
+               case 53:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 16)
+                     kind = 16;
+                  jjCheckNAddTwoStates(53, 9);
+                  break;
+               case 54:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(37, 39);
+                  break;
+               case 56:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(57);
+                  break;
+               case 57:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(57, 9);
+                  break;
+               case 58:
+                  if (curChar != 48)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddStates(17, 19);
+                  break;
+               case 60:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjAddStates(40, 41);
+                  break;
+               case 62:
+                  if ((0xff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(62, 63);
+                  break;
+               case 64:
+                  if (curChar == 47)
+                     jjAddStates(10, 11);
+                  break;
+               case 66:
+                  if ((0xffffffffffffdbffL & l) != 0L)
+                     jjCheckNAddStates(0, 2);
+                  break;
+               case 67:
+                  if ((0x2400L & l) != 0L && kind > 5)
+                     kind = 5;
+                  break;
+               case 68:
+                  if (curChar == 10 && kind > 5)
+                     kind = 5;
+                  break;
+               case 69:
+                  if (curChar == 13)
+                     jjstateSet[jjnewStateCnt++] = 68;
+                  break;
+               case 70:
+                  if (curChar == 42)
+                     jjCheckNAddTwoStates(71, 72);
+                  break;
+               case 71:
+                  if ((0xfffffbffffffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(71, 72);
+                  break;
+               case 72:
+                  if (curChar == 42)
+                     jjCheckNAddStates(42, 44);
+                  break;
+               case 73:
+                  if ((0xffff7bffffffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(74, 72);
+                  break;
+               case 74:
+                  if ((0xfffffbffffffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(74, 72);
+                  break;
+               case 75:
+                  if (curChar == 47 && kind > 6)
+                     kind = 6;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+               case 42:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 52)
+                     kind = 52;
+                  jjCheckNAdd(42);
+                  break;
+               case 2:
+               case 61:
+               case 63:
+                  if ((0x100000001000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(3);
+                  break;
+               case 3:
+                  if ((0x100000001000L & l) != 0L && kind > 12)
+                     kind = 12;
+                  break;
+               case 6:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(45, 46);
+                  break;
+               case 9:
+                  if ((0x5000000050L & l) != 0L && kind > 16)
+                     kind = 16;
+                  break;
+               case 11:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAdd(12);
+                  break;
+               case 13:
+                  if (curChar == 92)
+                     jjAddStates(47, 49);
+                  break;
+               case 14:
+                  if ((0x14404410000000L & l) != 0L)
+                     jjCheckNAdd(12);
+                  break;
+               case 20:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 21:
+                  if (curChar == 92)
+                     jjAddStates(50, 53);
+                  break;
+               case 22:
+                  if ((0x14404410000000L & l) != 0L)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 26:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 27:
+                  if (curChar == 92)
+                     jjAddStates(54, 57);
+                  break;
+               case 28:
+                  if ((0x14404410000000L & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 47:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(58, 59);
+                  break;
+               case 51:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(60, 61);
+                  break;
+               case 55:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(62, 63);
+                  break;
+               case 59:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjCheckNAdd(60);
+                  break;
+               case 60:
+                  if ((0x7e0000007eL & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(60, 61);
+                  break;
+               case 66:
+                  jjAddStates(0, 2);
+                  break;
+               case 71:
+                  jjCheckNAddTwoStates(71, 72);
+                  break;
+               case 73:
+               case 74:
+                  jjCheckNAddTwoStates(74, 72);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 11:
+                  if ((jjbitVec0[i2] & l2) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 12;
+                  break;
+               case 20:
+                  if ((jjbitVec0[i2] & l2) != 0L)
+                     jjCheckNAddStates(12, 14);
+                  break;
+               case 26:
+                  if ((jjbitVec0[i2] & l2) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 66:
+                  if ((jjbitVec0[i2] & l2) != 0L)
+                     jjAddStates(0, 2);
+                  break;
+               case 71:
+                  if ((jjbitVec0[i2] & l2) != 0L)
+                     jjCheckNAddTwoStates(71, 72);
+                  break;
+               case 73:
+               case 74:
+                  if ((jjbitVec0[i2] & l2) != 0L)
+                     jjCheckNAddTwoStates(74, 72);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 76 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+private int jjMoveStringLiteralDfa0_1()
+{
+   switch(curChar)
+   {
+      case 10:
+         return jjStopAtPos(0, 8);
+      case 92:
+         return jjMoveStringLiteralDfa1_1(0x600L);
+      default :
+         return 1;
+   }
+}
+private int jjMoveStringLiteralDfa1_1(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 10:
+         if ((active0 & 0x200L) != 0L)
+            return jjStopAtPos(1, 9);
+         break;
+      case 13:
+         return jjMoveStringLiteralDfa2_1(active0, 0x400L);
+      default :
+         return 2;
+   }
+   return 2;
+}
+private int jjMoveStringLiteralDfa2_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return 2;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 10:
+         if ((active0 & 0x400L) != 0L)
+            return jjStopAtPos(2, 10);
+         break;
+      default :
+         return 3;
+   }
+   return 3;
+}
+static final int[] jjnextStates = {
+   66, 67, 69, 44, 45, 50, 51, 54, 55, 9, 65, 70, 20, 21, 23, 11, 
+   13, 59, 62, 63, 5, 6, 9, 26, 27, 23, 26, 27, 30, 23, 20, 21, 
+   36, 23, 46, 47, 9, 54, 55, 9, 60, 61, 72, 73, 75, 7, 8, 14, 
+   15, 17, 22, 35, 37, 40, 28, 29, 31, 34, 48, 49, 52, 53, 56, 57, 
+};
+
+/** Token literal values. */
+public static final String[] jjstrLiteralImages = {
+"", null, null, null, null, null, null, null, null, null, null, null, null, 
+null, null, null, null, null, null, null, "\143\157\156\164\151\156\165\145", 
+"\166\157\154\141\164\151\154\145", "\162\145\147\151\163\164\145\162", "\165\156\163\151\147\156\145\144", 
+"\164\171\160\145\144\145\146", "\144\145\146\141\165\154\164", "\144\157\165\142\154\145", 
+"\163\151\172\145\157\146", "\163\167\151\164\143\150", "\162\145\164\165\162\156", 
+"\145\170\164\145\162\156", "\163\164\162\165\143\164", "\163\164\141\164\151\143", 
+"\163\151\147\156\145\144", "\167\150\151\154\145", "\142\162\145\141\153", "\165\156\151\157\156", 
+"\143\157\156\163\164", "\146\154\157\141\164", "\163\150\157\162\164", "\145\154\163\145", 
+"\143\141\163\145", "\154\157\156\147", "\145\156\165\155", "\141\165\164\157", 
+"\166\157\151\144", "\143\150\141\162", "\147\157\164\157", "\146\157\162", "\151\156\164", 
+"\151\146", "\144\157", null, null, null, "\50", "\51", "\73", "\52", "\54", "\56\56\56", 
+"\173", "\175", "\75", "\72", "\133", "\135", "\52\75", "\57\75", "\45\75", "\53\75", 
+"\55\75", "\74\74\75", "\76\76\75", "\46\75", "\136\75", "\174\75", "\77", "\174\174", 
+"\46\46", "\174", "\136", "\46", "\75\75", "\41\75", "\74", "\76", "\74\75", "\76\75", 
+"\74\74", "\76\76", "\53", "\55", "\57", "\45", "\53\53", "\55\55", "\176", "\41", 
+"\56", "\55\76", };
+
+/** Lexer state names. */
+public static final String[] lexStateNames = {
+   "DEFAULT",
+   "PREPROCESSOR_OUTPUT",
+};
+
+/** Lex State array. */
+public static final int[] jjnewLexState = {
+   -1, -1, -1, -1, -1, -1, -1, 1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, 
+};
+static final long[] jjtoToken = {
+   0xff9ffffffffd1001L, 0x1fffffffffL, 
+};
+static final long[] jjtoSkip = {
+   0x1feL, 0x0L, 
+};
+static final long[] jjtoMore = {
+   0xe00L, 0x0L, 
+};
+protected SimpleCharStream input_stream;
+private final int[] jjrounds = new int[76];
+private final int[] jjstateSet = new int[152];
+protected char curChar;
+/** Constructor. */
+public CParserTokenManager(SimpleCharStream stream){
+   if (SimpleCharStream.staticFlag)
+      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+   input_stream = stream;
+}
+
+/** Constructor. */
+public CParserTokenManager(SimpleCharStream stream, int lexState){
+   this(stream);
+   SwitchTo(lexState);
+}
+
+/** Reinitialise parser. */
+public void ReInit(SimpleCharStream stream)
+{
+   jjmatchedPos = jjnewStateCnt = 0;
+   curLexState = defaultLexState;
+   input_stream = stream;
+   ReInitRounds();
+}
+private void ReInitRounds()
+{
+   int i;
+   jjround = 0x80000001;
+   for (i = 76; i-- > 0;)
+      jjrounds[i] = 0x80000000;
+}
+
+/** Reinitialise parser. */
+public void ReInit(SimpleCharStream stream, int lexState)
+{
+   ReInit(stream);
+   SwitchTo(lexState);
+}
+
+/** Switch to specified lex state. */
+public void SwitchTo(int lexState)
+{
+   if (lexState >= 2 || lexState < 0)
+      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+   else
+      curLexState = lexState;
+}
+
+protected Token jjFillToken()
+{
+   final Token t;
+   final String curTokenImage;
+   final int beginLine;
+   final int endLine;
+   final int beginColumn;
+   final int endColumn;
+   String im = jjstrLiteralImages[jjmatchedKind];
+   curTokenImage = (im == null) ? input_stream.GetImage() : im;
+   beginLine = input_stream.getBeginLine();
+   beginColumn = input_stream.getBeginColumn();
+   endLine = input_stream.getEndLine();
+   endColumn = input_stream.getEndColumn();
+   t = Token.newToken(jjmatchedKind, curTokenImage);
+
+   t.beginLine = beginLine;
+   t.endLine = endLine;
+   t.beginColumn = beginColumn;
+   t.endColumn = endColumn;
+
+   return t;
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+/** Get the next Token. */
+public Token getNextToken() 
+{
+  Token matchedToken;
+  int curPos = 0;
+
+  EOFLoop :
+  for (;;)
+  {
+   try
+   {
+      curChar = input_stream.BeginToken();
+   }
+   catch(java.io.IOException e)
+   {
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      return matchedToken;
+   }
+
+   for (;;)
+   {
+     switch(curLexState)
+     {
+       case 0:
+         try { input_stream.backup(0);
+            while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L)
+               curChar = input_stream.BeginToken();
+         }
+         catch (java.io.IOException e1) { continue EOFLoop; }
+         jjmatchedKind = 0x7fffffff;
+         jjmatchedPos = 0;
+         curPos = jjMoveStringLiteralDfa0_0();
+         break;
+       case 1:
+         jjmatchedKind = 0x7fffffff;
+         jjmatchedPos = 0;
+         curPos = jjMoveStringLiteralDfa0_1();
+         if (jjmatchedPos == 0 && jjmatchedKind > 11)
+         {
+            jjmatchedKind = 11;
+         }
+         break;
+     }
+     if (jjmatchedKind != 0x7fffffff)
+     {
+        if (jjmatchedPos + 1 < curPos)
+           input_stream.backup(curPos - jjmatchedPos - 1);
+        if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+        {
+           matchedToken = jjFillToken();
+       if (jjnewLexState[jjmatchedKind] != -1)
+         curLexState = jjnewLexState[jjmatchedKind];
+           return matchedToken;
+        }
+        else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+        {
+         if (jjnewLexState[jjmatchedKind] != -1)
+           curLexState = jjnewLexState[jjmatchedKind];
+           continue EOFLoop;
+        }
+      if (jjnewLexState[jjmatchedKind] != -1)
+        curLexState = jjnewLexState[jjmatchedKind];
+        curPos = 0;
+        jjmatchedKind = 0x7fffffff;
+        try {
+           curChar = input_stream.readChar();
+           continue;
+        }
+        catch (java.io.IOException e1) { }
+     }
+     int error_line = input_stream.getEndLine();
+     int error_column = input_stream.getEndColumn();
+     String error_after = null;
+     boolean EOFSeen = false;
+     try { input_stream.readChar(); input_stream.backup(1); }
+     catch (java.io.IOException e1) {
+        EOFSeen = true;
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+        if (curChar == '\n' || curChar == '\r') {
+           error_line++;
+           error_column = 0;
+        }
+        else
+           error_column++;
+     }
+     if (!EOFSeen) {
+        input_stream.backup(1);
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+     }
+     throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+   }
+  }
+}
+
+private void jjCheckNAdd(int state)
+{
+   if (jjrounds[state] != jjround)
+   {
+      jjstateSet[jjnewStateCnt++] = state;
+      jjrounds[state] = jjround;
+   }
+}
+private void jjAddStates(int start, int end)
+{
+   do {
+      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+   } while (start++ != end);
+}
+private void jjCheckNAddTwoStates(int state1, int state2)
+{
+   jjCheckNAdd(state1);
+   jjCheckNAdd(state2);
+}
+
+private void jjCheckNAddStates(int start, int end)
+{
+   do {
+      jjCheckNAdd(jjnextStates[start]);
+   } while (start++ != end);
+}
+
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/ExpressionDatabaseHandler.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/ExpressionDatabaseHandler.java
new file mode 100644 (file)
index 0000000..36c34d1
--- /dev/null
@@ -0,0 +1,75 @@
+package org.gnunet.seaspider.parser;
+
+import java.io.File;
+
+import org.tmatesoft.sqljet.core.SqlJetException;
+import org.tmatesoft.sqljet.core.SqlJetTransactionMode;
+import org.tmatesoft.sqljet.core.table.ISqlJetTable;
+import org.tmatesoft.sqljet.core.table.SqlJetDb;
+
+public class ExpressionDatabaseHandler {
+       
+       private static SqlJetDb db = null;
+       
+       public static void createExpressionDatabase(String databasePath) {
+               String createTableQuery = "CREATE TABLE Expression ( expr_ID INT NOT NULL PRIMARY KEY , " +
+               "file_name TEXT NOT NULL , expr_syntax TEXT NOT NULL ," +
+               " start_lineno INT NOT NULL , end_lineno INT NOT NULL , " +
+               "scope_start_lineno INT NOT NULL , scope_end_lineno INT NOT NULL)";
+               
+               File dbFile = new File(databasePath + "/GNUnetExpressions.db");
+               dbFile.delete();/* Delete it if already existent */        
+               
+               /* Create Expressions database */
+               try {
+                       db = SqlJetDb.open(dbFile, true);
+                       db.getOptions().setAutovacuum(true);
+                       db.beginTransaction(SqlJetTransactionMode.WRITE);
+                       try {
+                               db.getOptions().setUserVersion(1);/* Sets the user's cookie */
+                       } finally {
+                               db.commit();
+                       }
+                       /* Create table Expression */
+                       db.createTable(createTableQuery);
+               }
+               catch (SqlJetException e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       
+       public static void closeDatabase()
+       {
+               try {
+                       db.close();
+               } catch (SqlJetException e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       
+       public static void insertIntoExpressionTable(String fileName, String expressionSyntax, 
+                                                                                               int startLineNo, int endLineNo, int scopeStartLineNo,
+                                                                                               int scopeEndLineNo)
+       {
+               if (db == null) {
+                       System.out.println("Error:Database handle is not initialized. Program will exit now!");
+                       System.exit(1);
+               }
+               
+               ISqlJetTable table;
+               try {
+                       table = db.getTable("Expression");
+                       db.beginTransaction(SqlJetTransactionMode.WRITE);
+                       try {
+                               table.insert(fileName, expressionSyntax, startLineNo, endLineNo, scopeStartLineNo, scopeEndLineNo);
+                       } finally {
+                               db.commit();
+                       }
+               }
+               catch (SqlJetException e) {
+                       e.printStackTrace();
+               }
+       }
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/GNUnetDepthFirstVisitor.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/GNUnetDepthFirstVisitor.java
new file mode 100644 (file)
index 0000000..17592b8
--- /dev/null
@@ -0,0 +1,36 @@
+package org.gnunet.seaspider.parser;
+import org.gnunet.seaspider.parser.nodes.AssignmentOperator;
+import org.gnunet.seaspider.parser.nodes.CompoundStatement;
+import org.gnunet.seaspider.parser.nodes.Expression;
+import org.gnunet.seaspider.parser.nodes.NodeToken;
+import org.gnunet.seaspider.parser.visitors.DepthFirstVisitor;
+
+public class GNUnetDepthFirstVisitor extends DepthFirstVisitor {
+       private int current_endline;
+       private int blockStart;
+       private int blockEnd;
+       
+        public void visit(Expression n) {
+               n.f0.accept(this);
+       }
+       public void visit(AssignmentOperator n) {
+           n.f0.accept(this);
+       }
+       
+       /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+    public void visit(CompoundStatement n) {
+       int old_ll = current_endline;
+       current_endline = n.f2.endLine;
+       System.out.println("Scope starts at line:" + n.f0.endLine + " and ends at line:" + n.f2.endLine);
+       n.f0.accept(this);
+       n.f1.accept(this);
+       n.f2.accept(this);
+       current_endline = old_ll;
+    }
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/GNUnetParser.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/GNUnetParser.java
new file mode 100644 (file)
index 0000000..d0a6a94
--- /dev/null
@@ -0,0 +1,5633 @@
+package org.gnunet.seaspider.parser;
+/* Generated By:JavaCC: Do not edit this line. CParser.java */
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+import org.gnunet.seaspider.parser.nodes.*;
+
+public class GNUnetParser implements CParserConstants {
+   private static final boolean DEBUG = false;
+   
+   public static void main(String args[])
+   {
+     GNUnetParser parser = null;
+     boolean isFirstFile = true;
+     int fileNotFoundCount = 0;
+     int successCount = 0;
+     int failureCount = 0;
+     String databasePath;
+     
+     if (null == (databasePath = args[0])) {
+        System.out.println("Error: Missing Database Path argument. Program will exit now!");
+        System.exit(1);
+     }
+     
+     System.out.println("C Parser Version 0.1Alpha:  Reading from GNUnet source directory . . .");
+     String gnunetSourcePath = System.getenv("MAINDIR") + "/src";
+     
+     /* Filtering out files */
+     FileFilter filter = new FileFilter() {
+         public boolean accept(File file) {
+             return file.isDirectory();
+         }
+     };
+     
+     /* File filter to get only source and header files */
+     FileFilter sourceFilter = new FileFilter() {
+       public boolean accept(File file) {
+               String fileName = file.getName();
+               return (fileName.endsWith(".c") || fileName.endsWith(".h"));
+       }
+     };
+     
+     /* Create the Expressions Database */
+     ExpressionDatabaseHandler.createExpressionDatabase(databasePath);
+     
+     File[] dirArr = (new File(gnunetSourcePath)).listFiles(filter);
+     for (int i = 0; i < dirArr.length; i++) {
+        File dir = dirArr[i];
+        File[] fileArr = dir.listFiles(sourceFilter);
+        for (int j = 0; j < fileArr.length; j++) {
+                try {
+                        if (isFirstFile) {
+                                parser = new GNUnetParser(new FileInputStream(fileArr[j].getPath()));
+                                isFirstFile = false;
+                        }
+                        else
+                                parser.ReInit(new FileInputStream(fileArr[j].getPath()));
+                }
+                catch (FileNotFoundException e) {
+                        fileNotFoundCount++;
+                        e.printStackTrace();
+                }
+                try {
+                        System.out.println("Parsing file: " + dir + "/" + fileArr[j].getName());
+                Node root = parser.TranslationUnit();
+                root.accept(new GNUnetDepthFirstVisitor());
+                System.out.println("File " + dir + "/" + fileArr[j].getName() + " parsed successfully.");
+                successCount++;
+            }
+            catch (ParseException e) {
+                System.out.println("Encountered errors during parsing file " + fileArr[j].getName());
+                failureCount++;
+                if (DEBUG)
+                        e.printStackTrace();
+            }
+        }
+     }
+     
+     /* We're done with the Expression Database, close it */
+     ExpressionDatabaseHandler.closeDatabase();
+     
+     System.out.println(successCount + " parsed successfully.");
+     System.out.println("Failed to parse " + failureCount + " files.");
+     System.out.println(fileNotFoundCount + " files not found.");
+  }
+
+  final public TranslationUnit TranslationUnit() throws ParseException {
+   NodeList n0 = new NodeList();
+   ExternalDeclaration n1;
+    label_1:
+    while (true) {
+      n1 = ExternalDeclaration();
+        n0.addNode(n1);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case REGISTER:
+      case UNSIGNED:
+      case TYPEDEF:
+      case DOUBLE:
+      case EXTERN:
+      case STRUCT:
+      case STATIC:
+      case SIGNED:
+      case UNION:
+      case CONST:
+      case FLOAT:
+      case SHORT:
+      case LONG:
+      case ENUM:
+      case AUTO:
+      case VOID:
+      case CHAR:
+      case INT:
+      case IDENTIFIER:
+        ;
+        break;
+      default:
+        jj_la1[0] = jj_gen;
+        break label_1;
+      }
+    }
+     n0.nodes.trimToSize();
+     {if (true) return new TranslationUnit(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ExternalDeclaration ExternalDeclaration() throws ParseException {
+   NodeListOptional n0 = new NodeListOptional();
+   StorageClassSpecifier n1;
+   NodeChoice n2;
+   FunctionDeclaration n3;
+   StructOrUnionSpecifier n4;
+   VariableDeclaration n5;
+   TypeDeclaration n6;
+    label_2:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case EXTERN:
+      case STATIC:
+        ;
+        break;
+      default:
+        jj_la1[1] = jj_gen;
+        break label_2;
+      }
+      n1 = StorageClassSpecifier();
+        n0.addNode(n1);
+    }
+     n0.nodes.trimToSize();
+    if (jj_2_1(2147483647)) {
+      n3 = FunctionDeclaration();
+           n2 = new NodeChoice(n3, 0);
+    } else if (jj_2_2(2147483647)) {
+      n4 = StructOrUnionSpecifier();
+           n2 = new NodeChoice(n4, 1);
+    } else if (jj_2_3(2147483647)) {
+      n5 = VariableDeclaration();
+           n2 = new NodeChoice(n5, 2);
+    } else if (jj_2_4(2147483647)) {
+      n6 = TypeDeclaration();
+           n2 = new NodeChoice(n6, 3);
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new ExternalDeclaration(n0,n2);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public FunctionDeclaration FunctionDeclaration() throws ParseException {
+   TypeSpecifier n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+   NodeOptional n5 = new NodeOptional();
+   ParameterList n6;
+   NodeToken n7;
+   Token n8;
+   NodeChoice n9;
+   NodeToken n10;
+   Token n11;
+   CompoundStatement n12;
+    n0 = TypeSpecifier();
+    n2 = jj_consume_token(IDENTIFIER);
+                     n1 = JTBToolkit.makeNodeToken(n2);
+    n4 = jj_consume_token(55);
+            n3 = JTBToolkit.makeNodeToken(n4);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case UNSIGNED:
+    case DOUBLE:
+    case STRUCT:
+    case SIGNED:
+    case UNION:
+    case CONST:
+    case FLOAT:
+    case SHORT:
+    case LONG:
+    case ENUM:
+    case VOID:
+    case CHAR:
+    case INT:
+    case IDENTIFIER:
+      n6 = ParameterList();
+        n5.addNode(n6);
+      break;
+    default:
+      jj_la1[2] = jj_gen;
+      ;
+    }
+    n8 = jj_consume_token(56);
+            n7 = JTBToolkit.makeNodeToken(n8);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 57:
+      n11 = jj_consume_token(57);
+                   n10 = JTBToolkit.makeNodeToken(n11);
+           n9 = new NodeChoice(n10, 0);
+      break;
+    case 61:
+      n12 = CompoundStatement();
+           n9 = new NodeChoice(n12, 1);
+      break;
+    default:
+      jj_la1[3] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new FunctionDeclaration(n0,n1,n3,n5,n7,n9);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public StorageClassSpecifier StorageClassSpecifier() throws ParseException {
+   NodeChoice n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case STATIC:
+      n2 = jj_consume_token(STATIC);
+                       n1 = JTBToolkit.makeNodeToken(n2);
+           n0 = new NodeChoice(n1, 0);
+      break;
+    case EXTERN:
+      n4 = jj_consume_token(EXTERN);
+                       n3 = JTBToolkit.makeNodeToken(n4);
+           n0 = new NodeChoice(n3, 1);
+      break;
+    default:
+      jj_la1[4] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new StorageClassSpecifier(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public TypeDeclaration TypeDeclaration() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   NodeChoice n2;
+   DataType n3;
+   FunctionType n4;
+   NodeToken n5;
+   Token n6;
+    n1 = jj_consume_token(TYPEDEF);
+                  n0 = JTBToolkit.makeNodeToken(n1);
+    if (jj_2_5(2147483647)) {
+      n3 = DataType();
+           n2 = new NodeChoice(n3, 0);
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case UNSIGNED:
+      case DOUBLE:
+      case STRUCT:
+      case SIGNED:
+      case UNION:
+      case CONST:
+      case FLOAT:
+      case SHORT:
+      case LONG:
+      case ENUM:
+      case VOID:
+      case CHAR:
+      case INT:
+      case IDENTIFIER:
+        n4 = FunctionType();
+           n2 = new NodeChoice(n4, 1);
+        break;
+      default:
+        jj_la1[5] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+    n6 = jj_consume_token(57);
+            n5 = JTBToolkit.makeNodeToken(n6);
+     {if (true) return new TypeDeclaration(n0,n2,n5);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public DataType DataType() throws ParseException {
+   StructOrUnionSpecifier n0;
+   NodeToken n1;
+   Token n2;
+    n0 = StructOrUnionSpecifier();
+    n2 = jj_consume_token(IDENTIFIER);
+                     n1 = JTBToolkit.makeNodeToken(n2);
+     {if (true) return new DataType(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public FunctionType FunctionType() throws ParseException {
+   TypeSpecifier n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+   NodeToken n5;
+   Token n6;
+   NodeToken n7;
+   Token n8;
+   NodeToken n9;
+   Token n10;
+   NodeOptional n11 = new NodeOptional();
+   ParameterList n12;
+   NodeToken n13;
+   Token n14;
+    n0 = TypeSpecifier();
+    n2 = jj_consume_token(55);
+            n1 = JTBToolkit.makeNodeToken(n2);
+    n4 = jj_consume_token(58);
+            n3 = JTBToolkit.makeNodeToken(n4);
+    n6 = jj_consume_token(IDENTIFIER);
+                     n5 = JTBToolkit.makeNodeToken(n6);
+    n8 = jj_consume_token(56);
+            n7 = JTBToolkit.makeNodeToken(n8);
+    n10 = jj_consume_token(55);
+             n9 = JTBToolkit.makeNodeToken(n10);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case UNSIGNED:
+    case DOUBLE:
+    case STRUCT:
+    case SIGNED:
+    case UNION:
+    case CONST:
+    case FLOAT:
+    case SHORT:
+    case LONG:
+    case ENUM:
+    case VOID:
+    case CHAR:
+    case INT:
+    case IDENTIFIER:
+      n12 = ParameterList();
+        n11.addNode(n12);
+      break;
+    default:
+      jj_la1[6] = jj_gen;
+      ;
+    }
+    n14 = jj_consume_token(56);
+             n13 = JTBToolkit.makeNodeToken(n14);
+     {if (true) return new FunctionType(n0,n1,n3,n5,n7,n9,n11,n13);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ParameterList ParameterList() throws ParseException {
+   ParameterDeclaration n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   ParameterDeclaration n5;
+   NodeOptional n6 = new NodeOptional();
+   NodeSequence n7;
+   NodeToken n8;
+   Token n9;
+   NodeToken n10;
+   Token n11;
+    n0 = ParameterDeclaration();
+    label_3:
+    while (true) {
+      if (jj_2_6(2)) {
+        ;
+      } else {
+        break label_3;
+      }
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(59);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = ParameterDeclaration();
+        n2.addNode(n5);
+        n1.addNode(n2);
+    }
+     n1.nodes.trimToSize();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 59:
+        n7 = new NodeSequence(2);
+      n9 = jj_consume_token(59);
+               n8 = JTBToolkit.makeNodeToken(n9);
+        n7.addNode(n8);
+      n11 = jj_consume_token(60);
+                  n10 = JTBToolkit.makeNodeToken(n11);
+        n7.addNode(n10);
+        n6.addNode(n7);
+      break;
+    default:
+      jj_la1[7] = jj_gen;
+      ;
+    }
+     {if (true) return new ParameterList(n0,n1,n6);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ParameterDeclaration ParameterDeclaration() throws ParseException {
+   TypeSpecifier n0;
+   NodeToken n1;
+   Token n2;
+   NodeOptional n3 = new NodeOptional();
+   Array n4;
+    n0 = TypeSpecifier();
+    n2 = jj_consume_token(IDENTIFIER);
+                     n1 = JTBToolkit.makeNodeToken(n2);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 65:
+      n4 = Array();
+        n3.addNode(n4);
+      break;
+    default:
+      jj_la1[8] = jj_gen;
+      ;
+    }
+     {if (true) return new ParameterDeclaration(n0,n1,n3);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public VariableDeclaration VariableDeclaration() throws ParseException {
+   VariableClassSpecifier n0;
+   TypeSpecifier n1;
+   InitDeclaratorList n2;
+   NodeToken n3;
+   Token n4;
+    n0 = VariableClassSpecifier();
+    n1 = TypeSpecifier();
+    n2 = InitDeclaratorList();
+    n4 = jj_consume_token(57);
+            n3 = JTBToolkit.makeNodeToken(n4);
+     {if (true) return new VariableDeclaration(n0,n1,n2,n3);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public LocalVariableDeclaration LocalVariableDeclaration() throws ParseException {
+   NodeOptional n0 = new NodeOptional();
+   NodeToken n1;
+   Token n2;
+   VariableDeclaration n3;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case STATIC:
+      n2 = jj_consume_token(STATIC);
+                    n1 = JTBToolkit.makeNodeToken(n2);
+        n0.addNode(n1);
+      break;
+    default:
+      jj_la1[9] = jj_gen;
+      ;
+    }
+    n3 = VariableDeclaration();
+     {if (true) return new LocalVariableDeclaration(n0,n3);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public VariableClassSpecifier VariableClassSpecifier() throws ParseException {
+   NodeListOptional n0 = new NodeListOptional();
+   NodeChoice n1;
+   NodeToken n2;
+   Token n3;
+   NodeToken n4;
+   Token n5;
+    label_4:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case REGISTER:
+      case AUTO:
+        ;
+        break;
+      default:
+        jj_la1[10] = jj_gen;
+        break label_4;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case AUTO:
+        n3 = jj_consume_token(AUTO);
+                     n2 = JTBToolkit.makeNodeToken(n3);
+           n1 = new NodeChoice(n2, 0);
+        break;
+      case REGISTER:
+        n5 = jj_consume_token(REGISTER);
+                         n4 = JTBToolkit.makeNodeToken(n5);
+           n1 = new NodeChoice(n4, 1);
+        break;
+      default:
+        jj_la1[11] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+        n0.addNode(n1);
+    }
+     n0.nodes.trimToSize();
+     {if (true) return new VariableClassSpecifier(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public TypeSpecifier TypeSpecifier() throws ParseException {
+   NodeOptional n0 = new NodeOptional();
+   NodeToken n1;
+   Token n2;
+   NodeChoice n3;
+   NodeToken n4;
+   Token n5;
+   NodeToken n6;
+   Token n7;
+   NodeSequence n8;
+   NodeToken n9;
+   Token n10;
+   NodeOptional n11 = new NodeOptional();
+   NodeToken n12;
+   Token n13;
+   NodeToken n14;
+   Token n15;
+   NodeSequence n16;
+   NodeToken n17;
+   Token n18;
+   NodeOptional n19 = new NodeOptional();
+   NodeToken n20;
+   Token n21;
+   NodeToken n22;
+   Token n23;
+   NodeToken n24;
+   Token n25;
+   NodeSequence n26;
+   NodeChoice n27;
+   NodeToken n28;
+   Token n29;
+   NodeToken n30;
+   Token n31;
+   NodeOptional n32 = new NodeOptional();
+   NodeChoice n33;
+   NodeToken n34;
+   Token n35;
+   NodeSequence n36;
+   NodeToken n37;
+   Token n38;
+   NodeOptional n39;
+   NodeToken n40;
+   Token n41;
+   NodeToken n42;
+   Token n43;
+   NodeSequence n44;
+   NodeToken n45;
+   Token n46;
+   NodeOptional n47;
+   NodeToken n48;
+   Token n49;
+   StructOrUnionSpecifier n50;
+   EnumSpecifier n51;
+   NodeToken n52;
+   Token n53;
+   NodeOptional n54 = new NodeOptional();
+   Pointer n55;
+   NodeOptional n56 = new NodeOptional();
+   Array n57;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case CONST:
+      n2 = jj_consume_token(CONST);
+                   n1 = JTBToolkit.makeNodeToken(n2);
+        n0.addNode(n1);
+      break;
+    default:
+      jj_la1[12] = jj_gen;
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case VOID:
+      n5 = jj_consume_token(VOID);
+                     n4 = JTBToolkit.makeNodeToken(n5);
+           n3 = new NodeChoice(n4, 0);
+      break;
+    case CHAR:
+      n7 = jj_consume_token(CHAR);
+                     n6 = JTBToolkit.makeNodeToken(n7);
+           n3 = new NodeChoice(n6, 1);
+      break;
+    case SHORT:
+           n8 = new NodeSequence(2);
+      n10 = jj_consume_token(SHORT);
+                       n9 = JTBToolkit.makeNodeToken(n10);
+           n8.addNode(n9);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INT:
+        n13 = jj_consume_token(INT);
+                        n12 = JTBToolkit.makeNodeToken(n13);
+              n11.addNode(n12);
+        break;
+      default:
+        jj_la1[13] = jj_gen;
+        ;
+      }
+           n8.addNode(n11);
+           n3 = new NodeChoice(n8, 2);
+      break;
+    case INT:
+      n15 = jj_consume_token(INT);
+                     n14 = JTBToolkit.makeNodeToken(n15);
+           n3 = new NodeChoice(n14, 3);
+      break;
+    case LONG:
+           n16 = new NodeSequence(2);
+      n18 = jj_consume_token(LONG);
+                      n17 = JTBToolkit.makeNodeToken(n18);
+           n16.addNode(n17);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case LONG:
+        n21 = jj_consume_token(LONG);
+                         n20 = JTBToolkit.makeNodeToken(n21);
+              n19.addNode(n20);
+        break;
+      default:
+        jj_la1[14] = jj_gen;
+        ;
+      }
+           n16.addNode(n19);
+           n3 = new NodeChoice(n16, 4);
+      break;
+    case FLOAT:
+      n23 = jj_consume_token(FLOAT);
+                       n22 = JTBToolkit.makeNodeToken(n23);
+           n3 = new NodeChoice(n22, 5);
+      break;
+    case DOUBLE:
+      n25 = jj_consume_token(DOUBLE);
+                        n24 = JTBToolkit.makeNodeToken(n25);
+           n3 = new NodeChoice(n24, 6);
+      break;
+    case UNSIGNED:
+    case SIGNED:
+           n26 = new NodeSequence(2);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case SIGNED:
+        n29 = jj_consume_token(SIGNED);
+                              n28 = JTBToolkit.makeNodeToken(n29);
+                 n27 = new NodeChoice(n28, 0);
+        break;
+      case UNSIGNED:
+        n31 = jj_consume_token(UNSIGNED);
+                                n30 = JTBToolkit.makeNodeToken(n31);
+                 n27 = new NodeChoice(n30, 1);
+        break;
+      default:
+        jj_la1[15] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+           n26.addNode(n27);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case SHORT:
+      case LONG:
+      case CHAR:
+      case INT:
+              n39 = new NodeOptional();
+              n47 = new NodeOptional();
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case CHAR:
+          n35 = jj_consume_token(CHAR);
+                            n34 = JTBToolkit.makeNodeToken(n35);
+                 n33 = new NodeChoice(n34, 0);
+          break;
+        case SHORT:
+                 n36 = new NodeSequence(2);
+          n38 = jj_consume_token(SHORT);
+                             n37 = JTBToolkit.makeNodeToken(n38);
+                 n36.addNode(n37);
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case INT:
+            n41 = jj_consume_token(INT);
+                              n40 = JTBToolkit.makeNodeToken(n41);
+                    n39.addNode(n40);
+            break;
+          default:
+            jj_la1[16] = jj_gen;
+            ;
+          }
+                 n36.addNode(n39);
+                 n33 = new NodeChoice(n36, 1);
+          break;
+        case INT:
+          n43 = jj_consume_token(INT);
+                           n42 = JTBToolkit.makeNodeToken(n43);
+                 n33 = new NodeChoice(n42, 2);
+          break;
+        case LONG:
+                 n44 = new NodeSequence(2);
+          n46 = jj_consume_token(LONG);
+                            n45 = JTBToolkit.makeNodeToken(n46);
+                 n44.addNode(n45);
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case LONG:
+            n49 = jj_consume_token(LONG);
+                               n48 = JTBToolkit.makeNodeToken(n49);
+                    n47.addNode(n48);
+            break;
+          default:
+            jj_la1[17] = jj_gen;
+            ;
+          }
+                 n44.addNode(n47);
+                 n33 = new NodeChoice(n44, 3);
+          break;
+        default:
+          jj_la1[18] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+              n32.addNode(n33);
+        break;
+      default:
+        jj_la1[19] = jj_gen;
+        ;
+      }
+           n26.addNode(n32);
+           n3 = new NodeChoice(n26, 7);
+      break;
+    case STRUCT:
+    case UNION:
+      n50 = StructOrUnionSpecifier();
+           n3 = new NodeChoice(n50, 8);
+      break;
+    case ENUM:
+      n51 = EnumSpecifier();
+           n3 = new NodeChoice(n51, 9);
+      break;
+    case IDENTIFIER:
+      n53 = jj_consume_token(IDENTIFIER);
+                            n52 = JTBToolkit.makeNodeToken(n53);
+           n3 = new NodeChoice(n52, 10);
+      break;
+    default:
+      jj_la1[20] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 58:
+      n55 = Pointer();
+        n54.addNode(n55);
+      break;
+    default:
+      jj_la1[21] = jj_gen;
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 65:
+      n57 = Array();
+        n56.addNode(n57);
+      break;
+    default:
+      jj_la1[22] = jj_gen;
+      ;
+    }
+     {if (true) return new TypeSpecifier(n0,n3,n54,n56);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public NoIdentifierTypeSpecifier NoIdentifierTypeSpecifier() throws ParseException {
+   NodeOptional n0 = new NodeOptional();
+   NodeToken n1;
+   Token n2;
+   NodeChoice n3;
+   NodeToken n4;
+   Token n5;
+   NodeToken n6;
+   Token n7;
+   NodeSequence n8;
+   NodeToken n9;
+   Token n10;
+   NodeOptional n11 = new NodeOptional();
+   NodeToken n12;
+   Token n13;
+   NodeToken n14;
+   Token n15;
+   NodeSequence n16;
+   NodeToken n17;
+   Token n18;
+   NodeOptional n19 = new NodeOptional();
+   NodeToken n20;
+   Token n21;
+   NodeToken n22;
+   Token n23;
+   NodeToken n24;
+   Token n25;
+   NodeSequence n26;
+   NodeChoice n27;
+   NodeToken n28;
+   Token n29;
+   NodeToken n30;
+   Token n31;
+   NodeOptional n32 = new NodeOptional();
+   NodeChoice n33;
+   NodeToken n34;
+   Token n35;
+   NodeSequence n36;
+   NodeToken n37;
+   Token n38;
+   NodeOptional n39;
+   NodeToken n40;
+   Token n41;
+   NodeToken n42;
+   Token n43;
+   NodeSequence n44;
+   NodeToken n45;
+   Token n46;
+   NodeOptional n47;
+   NodeToken n48;
+   Token n49;
+   StructOrUnionSpecifier n50;
+   EnumSpecifier n51;
+   NodeOptional n52 = new NodeOptional();
+   Pointer n53;
+   NodeOptional n54 = new NodeOptional();
+   Array n55;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case CONST:
+      n2 = jj_consume_token(CONST);
+                   n1 = JTBToolkit.makeNodeToken(n2);
+        n0.addNode(n1);
+      break;
+    default:
+      jj_la1[23] = jj_gen;
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case VOID:
+      n5 = jj_consume_token(VOID);
+                     n4 = JTBToolkit.makeNodeToken(n5);
+           n3 = new NodeChoice(n4, 0);
+      break;
+    case CHAR:
+      n7 = jj_consume_token(CHAR);
+                     n6 = JTBToolkit.makeNodeToken(n7);
+           n3 = new NodeChoice(n6, 1);
+      break;
+    case SHORT:
+           n8 = new NodeSequence(2);
+      n10 = jj_consume_token(SHORT);
+                       n9 = JTBToolkit.makeNodeToken(n10);
+           n8.addNode(n9);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INT:
+        n13 = jj_consume_token(INT);
+                        n12 = JTBToolkit.makeNodeToken(n13);
+              n11.addNode(n12);
+        break;
+      default:
+        jj_la1[24] = jj_gen;
+        ;
+      }
+           n8.addNode(n11);
+           n3 = new NodeChoice(n8, 2);
+      break;
+    case INT:
+      n15 = jj_consume_token(INT);
+                     n14 = JTBToolkit.makeNodeToken(n15);
+           n3 = new NodeChoice(n14, 3);
+      break;
+    case LONG:
+           n16 = new NodeSequence(2);
+      n18 = jj_consume_token(LONG);
+                      n17 = JTBToolkit.makeNodeToken(n18);
+           n16.addNode(n17);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case LONG:
+        n21 = jj_consume_token(LONG);
+                         n20 = JTBToolkit.makeNodeToken(n21);
+              n19.addNode(n20);
+        break;
+      default:
+        jj_la1[25] = jj_gen;
+        ;
+      }
+           n16.addNode(n19);
+           n3 = new NodeChoice(n16, 4);
+      break;
+    case FLOAT:
+      n23 = jj_consume_token(FLOAT);
+                       n22 = JTBToolkit.makeNodeToken(n23);
+           n3 = new NodeChoice(n22, 5);
+      break;
+    case DOUBLE:
+      n25 = jj_consume_token(DOUBLE);
+                        n24 = JTBToolkit.makeNodeToken(n25);
+           n3 = new NodeChoice(n24, 6);
+      break;
+    case UNSIGNED:
+    case SIGNED:
+           n26 = new NodeSequence(2);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case SIGNED:
+        n29 = jj_consume_token(SIGNED);
+                              n28 = JTBToolkit.makeNodeToken(n29);
+                 n27 = new NodeChoice(n28, 0);
+        break;
+      case UNSIGNED:
+        n31 = jj_consume_token(UNSIGNED);
+                                n30 = JTBToolkit.makeNodeToken(n31);
+                 n27 = new NodeChoice(n30, 1);
+        break;
+      default:
+        jj_la1[26] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+           n26.addNode(n27);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case SHORT:
+      case LONG:
+      case CHAR:
+      case INT:
+              n39 = new NodeOptional();
+              n47 = new NodeOptional();
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case CHAR:
+          n35 = jj_consume_token(CHAR);
+                            n34 = JTBToolkit.makeNodeToken(n35);
+                 n33 = new NodeChoice(n34, 0);
+          break;
+        case SHORT:
+                 n36 = new NodeSequence(2);
+          n38 = jj_consume_token(SHORT);
+                             n37 = JTBToolkit.makeNodeToken(n38);
+                 n36.addNode(n37);
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case INT:
+            n41 = jj_consume_token(INT);
+                              n40 = JTBToolkit.makeNodeToken(n41);
+                    n39.addNode(n40);
+            break;
+          default:
+            jj_la1[27] = jj_gen;
+            ;
+          }
+                 n36.addNode(n39);
+                 n33 = new NodeChoice(n36, 1);
+          break;
+        case INT:
+          n43 = jj_consume_token(INT);
+                           n42 = JTBToolkit.makeNodeToken(n43);
+                 n33 = new NodeChoice(n42, 2);
+          break;
+        case LONG:
+                 n44 = new NodeSequence(2);
+          n46 = jj_consume_token(LONG);
+                            n45 = JTBToolkit.makeNodeToken(n46);
+                 n44.addNode(n45);
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case LONG:
+            n49 = jj_consume_token(LONG);
+                               n48 = JTBToolkit.makeNodeToken(n49);
+                    n47.addNode(n48);
+            break;
+          default:
+            jj_la1[28] = jj_gen;
+            ;
+          }
+                 n44.addNode(n47);
+                 n33 = new NodeChoice(n44, 3);
+          break;
+        default:
+          jj_la1[29] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+              n32.addNode(n33);
+        break;
+      default:
+        jj_la1[30] = jj_gen;
+        ;
+      }
+           n26.addNode(n32);
+           n3 = new NodeChoice(n26, 7);
+      break;
+    case STRUCT:
+    case UNION:
+      n50 = StructOrUnionSpecifier();
+           n3 = new NodeChoice(n50, 8);
+      break;
+    case ENUM:
+      n51 = EnumSpecifier();
+           n3 = new NodeChoice(n51, 9);
+      break;
+    default:
+      jj_la1[31] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 58:
+      n53 = Pointer();
+        n52.addNode(n53);
+      break;
+    default:
+      jj_la1[32] = jj_gen;
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 65:
+      n55 = Array();
+        n54.addNode(n55);
+      break;
+    default:
+      jj_la1[33] = jj_gen;
+      ;
+    }
+     {if (true) return new NoIdentifierTypeSpecifier(n0,n3,n52,n54);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public StructOrUnionSpecifier StructOrUnionSpecifier() throws ParseException {
+   NodeChoice n0;
+   NodeSequence n1;
+   StructOrUnion n2;
+   NodeOptional n3 = new NodeOptional();
+   NodeToken n4;
+   Token n5;
+   NodeToken n6;
+   Token n7;
+   StructDeclarationList n8;
+   NodeToken n9;
+   Token n10;
+   NodeSequence n11;
+   StructOrUnion n12;
+   NodeToken n13;
+   Token n14;
+    if (jj_2_7(3)) {
+        n1 = new NodeSequence(6);
+      n2 = StructOrUnion();
+        n1.addNode(n2);
+      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[34] = jj_gen;
+        ;
+      }
+        n1.addNode(n3);
+      n7 = jj_consume_token(61);
+               n6 = JTBToolkit.makeNodeToken(n7);
+        n1.addNode(n6);
+      n8 = StructDeclarationList();
+        n1.addNode(n8);
+      n10 = jj_consume_token(62);
+                n9 = JTBToolkit.makeNodeToken(n10);
+        n1.addNode(n9);
+        n0 = new NodeChoice(n1, 0);
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case STRUCT:
+      case UNION:
+        n11 = new NodeSequence(2);
+        n12 = StructOrUnion();
+        n11.addNode(n12);
+        n14 = jj_consume_token(IDENTIFIER);
+                         n13 = JTBToolkit.makeNodeToken(n14);
+        n11.addNode(n13);
+        n0 = new NodeChoice(n11, 1);
+        break;
+      default:
+        jj_la1[35] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+     {if (true) return new StructOrUnionSpecifier(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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[36] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new StructOrUnion(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public StructDeclarationList StructDeclarationList() throws ParseException {
+   NodeList n0 = new NodeList();
+   StructDeclaration n1;
+    label_5:
+    while (true) {
+      n1 = StructDeclaration();
+        n0.addNode(n1);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case UNSIGNED:
+      case DOUBLE:
+      case STRUCT:
+      case SIGNED:
+      case UNION:
+      case CONST:
+      case FLOAT:
+      case SHORT:
+      case LONG:
+      case ENUM:
+      case VOID:
+      case CHAR:
+      case INT:
+      case IDENTIFIER:
+        ;
+        break;
+      default:
+        jj_la1[37] = jj_gen;
+        break label_5;
+      }
+    }
+     n0.nodes.trimToSize();
+     {if (true) return new StructDeclarationList(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public InitDeclaratorList InitDeclaratorList() throws ParseException {
+   InitDeclarator n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   InitDeclarator n5;
+    n0 = InitDeclarator();
+    label_6:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 59:
+        ;
+        break;
+      default:
+        jj_la1[38] = jj_gen;
+        break label_6;
+      }
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(59);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = InitDeclarator();
+        n2.addNode(n5);
+        n1.addNode(n2);
+    }
+     n1.nodes.trimToSize();
+     {if (true) return new InitDeclaratorList(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public InitDeclarator InitDeclarator() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   NodeOptional n2 = new NodeOptional();
+   Array n3;
+   NodeOptional n4 = new NodeOptional();
+   NodeSequence n5;
+   NodeToken n6;
+   Token n7;
+   Initializer n8;
+    n1 = jj_consume_token(IDENTIFIER);
+                     n0 = JTBToolkit.makeNodeToken(n1);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 65:
+      n3 = Array();
+        n2.addNode(n3);
+      break;
+    default:
+      jj_la1[39] = jj_gen;
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 63:
+        n5 = new NodeSequence(2);
+      n7 = jj_consume_token(63);
+               n6 = JTBToolkit.makeNodeToken(n7);
+        n5.addNode(n6);
+      n8 = Initializer();
+        n5.addNode(n8);
+        n4.addNode(n5);
+      break;
+    default:
+      jj_la1[40] = jj_gen;
+      ;
+    }
+     {if (true) return new InitDeclarator(n0,n2,n4);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public StructDeclaration StructDeclaration() throws ParseException {
+   TypeSpecifier n0;
+   NodeToken n1;
+   Token n2;
+   NodeOptional n3 = new NodeOptional();
+   NodeChoice n4;
+   Array n5;
+   NodeSequence n6;
+   NodeToken n7;
+   Token n8;
+   ConstantExpression n9;
+   NodeOptional n10 = new NodeOptional();
+   NodeToken n11;
+   Token n12;
+   NodeToken n13;
+   Token n14;
+    n0 = TypeSpecifier();
+    n2 = jj_consume_token(IDENTIFIER);
+                     n1 = JTBToolkit.makeNodeToken(n2);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 64:
+    case 65:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 65:
+        n5 = Array();
+           n4 = new NodeChoice(n5, 0);
+        break;
+      case 64:
+           n6 = new NodeSequence(2);
+        n8 = jj_consume_token(64);
+                  n7 = JTBToolkit.makeNodeToken(n8);
+           n6.addNode(n7);
+        n9 = ConstantExpression();
+           n6.addNode(n9);
+           n4 = new NodeChoice(n6, 1);
+        break;
+      default:
+        jj_la1[41] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+        n3.addNode(n4);
+      break;
+    default:
+      jj_la1[42] = jj_gen;
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case IDENTIFIER:
+      n12 = jj_consume_token(IDENTIFIER);
+                         n11 = JTBToolkit.makeNodeToken(n12);
+        n10.addNode(n11);
+      break;
+    default:
+      jj_la1[43] = jj_gen;
+      ;
+    }
+    n14 = jj_consume_token(57);
+             n13 = JTBToolkit.makeNodeToken(n14);
+     {if (true) return new StructDeclaration(n0,n1,n3,n10,n13);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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_8(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[44] = jj_gen;
+        ;
+      }
+           n3.addNode(n4);
+      n8 = jj_consume_token(61);
+                  n7 = JTBToolkit.makeNodeToken(n8);
+           n3.addNode(n7);
+      n9 = EnumeratorList();
+           n3.addNode(n9);
+      n11 = jj_consume_token(62);
+                   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[45] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+     {if (true) return new EnumSpecifier(n0,n2);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public EnumeratorList EnumeratorList() throws ParseException {
+   Enumerator n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   Enumerator n5;
+    n0 = Enumerator();
+    label_7:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 59:
+        ;
+        break;
+      default:
+        jj_la1[46] = jj_gen;
+        break label_7;
+      }
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(59);
+               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");
+  }
+
+  final public 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 63:
+        n3 = new NodeSequence(2);
+      n5 = jj_consume_token(63);
+               n4 = JTBToolkit.makeNodeToken(n5);
+        n3.addNode(n4);
+      n6 = ConstantExpression();
+        n3.addNode(n6);
+        n2.addNode(n3);
+      break;
+    default:
+      jj_la1[47] = jj_gen;
+      ;
+    }
+     {if (true) return new Enumerator(n0,n2);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Pointer Pointer() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   NodeOptional n2 = new NodeOptional();
+   NodeToken n3;
+   Token n4;
+   NodeOptional n5 = new NodeOptional();
+   Pointer n6;
+    n1 = jj_consume_token(58);
+            n0 = JTBToolkit.makeNodeToken(n1);
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case CONST:
+      n4 = jj_consume_token(CONST);
+                   n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      break;
+    default:
+      jj_la1[48] = jj_gen;
+      ;
+    }
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case 58:
+      n6 = Pointer();
+        n5.addNode(n6);
+      break;
+    default:
+      jj_la1[49] = jj_gen;
+      ;
+    }
+     {if (true) return new Pointer(n0,n2,n5);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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_8:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 59:
+        ;
+        break;
+      default:
+        jj_la1[50] = jj_gen;
+        break label_8;
+      }
+        n3 = new NodeSequence(2);
+      n5 = jj_consume_token(59);
+               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");
+  }
+
+  final public 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 55:
+    case 58:
+    case 82:
+    case 91:
+    case 92:
+    case 95:
+    case 96:
+    case 97:
+    case 98:
+      n1 = AssignmentExpression();
+           n0 = new NodeChoice(n1, 0);
+      break;
+    case 61:
+           n2 = new NodeSequence(4);
+      n4 = jj_consume_token(61);
+                  n3 = JTBToolkit.makeNodeToken(n4);
+           n2.addNode(n3);
+      n5 = InitializerList();
+           n2.addNode(n5);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 59:
+        n8 = jj_consume_token(59);
+                     n7 = JTBToolkit.makeNodeToken(n8);
+              n6.addNode(n7);
+        break;
+      default:
+        jj_la1[51] = jj_gen;
+        ;
+      }
+           n2.addNode(n6);
+      n10 = jj_consume_token(62);
+                   n9 = JTBToolkit.makeNodeToken(n10);
+           n2.addNode(n9);
+           n0 = new NodeChoice(n2, 1);
+      break;
+    default:
+      jj_la1[52] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new Initializer(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public InitializerList InitializerList() throws ParseException {
+   Initializer n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   Initializer n5;
+    n0 = Initializer();
+    label_9:
+    while (true) {
+      if (jj_2_9(2)) {
+        ;
+      } else {
+        break label_9;
+      }
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(59);
+               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");
+  }
+
+  final public Array Array() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   NodeOptional n2 = new NodeOptional();
+   ConstantExpression n3;
+   NodeToken n4;
+   Token n5;
+    n1 = jj_consume_token(65);
+            n0 = JTBToolkit.makeNodeToken(n1);
+    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 55:
+    case 58:
+    case 82:
+    case 91:
+    case 92:
+    case 95:
+    case 96:
+    case 97:
+    case 98:
+      n3 = ConstantExpression();
+        n2.addNode(n3);
+      break;
+    default:
+      jj_la1[53] = jj_gen;
+      ;
+    }
+    n5 = jj_consume_token(66);
+            n4 = JTBToolkit.makeNodeToken(n5);
+     {if (true) return new Array(n0,n2,n4);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Statement Statement() throws ParseException {
+   NodeChoice n0;
+   LabeledStatement n1;
+   ExpressionStatement n2;
+   CompoundStatement n3;
+   SelectionStatement n4;
+   IterationStatement n5;
+   JumpStatement n6;
+    if (jj_2_10(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 55:
+      case 57:
+      case 58:
+      case 82:
+      case 91:
+      case 92:
+      case 95:
+      case 96:
+      case 97:
+      case 98:
+        n2 = ExpressionStatement();
+           n0 = new NodeChoice(n2, 1);
+        break;
+      case 61:
+        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[54] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+     {if (true) return new Statement(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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(64);
+                  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(64);
+                   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(64);
+                   n17 = JTBToolkit.makeNodeToken(n18);
+           n14.addNode(n17);
+      n19 = Statement();
+           n14.addNode(n19);
+           n0 = new NodeChoice(n14, 2);
+      break;
+    default:
+      jj_la1[55] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new LabeledStatement(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 55:
+    case 58:
+    case 82:
+    case 91:
+    case 92:
+    case 95:
+    case 96:
+    case 97:
+    case 98:
+      n1 = Expression();
+        n0.addNode(n1);
+      break;
+    default:
+      jj_la1[56] = jj_gen;
+      ;
+    }
+    n3 = jj_consume_token(57);
+            n2 = JTBToolkit.makeNodeToken(n3);
+     {if (true) return new ExpressionStatement(n0,n2);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public CompoundStatement CompoundStatement() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   NodeListOptional n2 = new NodeListOptional();
+   NodeChoice n3;
+   LocalVariableDeclaration n4;
+   Statement n5;
+   NodeToken n6;
+   Token n7;
+    n1 = jj_consume_token(61);
+            n0 = JTBToolkit.makeNodeToken(n1);
+    label_10:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case INTEGER_LITERAL:
+      case FLOATING_POINT_LITERAL:
+      case CHARACTER_LITERAL:
+      case STRING_LITERAL:
+      case CONTINUE:
+      case REGISTER:
+      case UNSIGNED:
+      case DFLT:
+      case DOUBLE:
+      case SIZEOF:
+      case SWITCH:
+      case RETURN:
+      case STRUCT:
+      case STATIC:
+      case SIGNED:
+      case WHILE:
+      case BREAK:
+      case UNION:
+      case CONST:
+      case FLOAT:
+      case SHORT:
+      case CASE:
+      case LONG:
+      case ENUM:
+      case AUTO:
+      case VOID:
+      case CHAR:
+      case GOTO:
+      case FOR:
+      case INT:
+      case IF:
+      case DO:
+      case IDENTIFIER:
+      case 55:
+      case 57:
+      case 58:
+      case 61:
+      case 82:
+      case 91:
+      case 92:
+      case 95:
+      case 96:
+      case 97:
+      case 98:
+        ;
+        break;
+      default:
+        jj_la1[57] = jj_gen;
+        break label_10;
+      }
+      if (jj_2_11(2147483647)) {
+        n4 = LocalVariableDeclaration();
+           n3 = new NodeChoice(n4, 0);
+      } 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 55:
+        case 57:
+        case 58:
+        case 61:
+        case 82:
+        case 91:
+        case 92:
+        case 95:
+        case 96:
+        case 97:
+        case 98:
+          n5 = Statement();
+           n3 = new NodeChoice(n5, 1);
+          break;
+        default:
+          jj_la1[58] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+        n2.addNode(n3);
+    }
+     n2.nodes.trimToSize();
+    n7 = jj_consume_token(62);
+            n6 = JTBToolkit.makeNodeToken(n7);
+     {if (true) return new CompoundStatement(n0,n2,n6);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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(55);
+                  n4 = JTBToolkit.makeNodeToken(n5);
+           n1.addNode(n4);
+      n6 = Expression();
+           n1.addNode(n6);
+      n8 = jj_consume_token(56);
+                  n7 = JTBToolkit.makeNodeToken(n8);
+           n1.addNode(n7);
+      n9 = Statement();
+           n1.addNode(n9);
+      if (jj_2_12(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(55);
+                   n18 = JTBToolkit.makeNodeToken(n19);
+           n15.addNode(n18);
+      n20 = Expression();
+           n15.addNode(n20);
+      n22 = jj_consume_token(56);
+                   n21 = JTBToolkit.makeNodeToken(n22);
+           n15.addNode(n21);
+      n23 = Statement();
+           n15.addNode(n23);
+           n0 = new NodeChoice(n15, 1);
+      break;
+    default:
+      jj_la1[59] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new SelectionStatement(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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(55);
+                  n4 = JTBToolkit.makeNodeToken(n5);
+           n1.addNode(n4);
+      n6 = Expression();
+           n1.addNode(n6);
+      n8 = jj_consume_token(56);
+                  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(55);
+                   n16 = JTBToolkit.makeNodeToken(n17);
+           n10.addNode(n16);
+      n18 = Expression();
+           n10.addNode(n18);
+      n20 = jj_consume_token(56);
+                   n19 = JTBToolkit.makeNodeToken(n20);
+           n10.addNode(n19);
+      n22 = jj_consume_token(57);
+                   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(55);
+                   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 55:
+      case 58:
+      case 82:
+      case 91:
+      case 92:
+      case 95:
+      case 96:
+      case 97:
+      case 98:
+        n29 = Expression();
+              n28.addNode(n29);
+        break;
+      default:
+        jj_la1[60] = jj_gen;
+        ;
+      }
+           n23.addNode(n28);
+      n31 = jj_consume_token(57);
+                   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 55:
+      case 58:
+      case 82:
+      case 91:
+      case 92:
+      case 95:
+      case 96:
+      case 97:
+      case 98:
+        n33 = Expression();
+              n32.addNode(n33);
+        break;
+      default:
+        jj_la1[61] = jj_gen;
+        ;
+      }
+           n23.addNode(n32);
+      n35 = jj_consume_token(57);
+                   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 55:
+      case 58:
+      case 82:
+      case 91:
+      case 92:
+      case 95:
+      case 96:
+      case 97:
+      case 98:
+        n37 = Expression();
+              n36.addNode(n37);
+        break;
+      default:
+        jj_la1[62] = jj_gen;
+        ;
+      }
+           n23.addNode(n36);
+      n39 = jj_consume_token(56);
+                   n38 = JTBToolkit.makeNodeToken(n39);
+           n23.addNode(n38);
+      n40 = Statement();
+           n23.addNode(n40);
+           n0 = new NodeChoice(n23, 2);
+      break;
+    default:
+      jj_la1[63] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new IterationStatement(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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(57);
+                  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(57);
+                   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(57);
+                   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 55:
+      case 58:
+      case 82:
+      case 91:
+      case 92:
+      case 95:
+      case 96:
+      case 97:
+      case 98:
+        n22 = Expression();
+              n21.addNode(n22);
+        break;
+      default:
+        jj_la1[64] = jj_gen;
+        ;
+      }
+           n18.addNode(n21);
+      n24 = jj_consume_token(57);
+                   n23 = JTBToolkit.makeNodeToken(n24);
+           n18.addNode(n23);
+           n0 = new NodeChoice(n18, 3);
+      break;
+    default:
+      jj_la1[65] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new JumpStatement(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public Expression Expression() throws ParseException {
+   AssignmentExpression n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   AssignmentExpression n5;
+    n0 = AssignmentExpression();
+    label_11:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 59:
+        ;
+        break;
+      default:
+        jj_la1[66] = jj_gen;
+        break label_11;
+      }
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(59);
+               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");
+  }
+
+  final public AssignmentExpression AssignmentExpression() throws ParseException {
+   NodeChoice n0;
+   NodeSequence n1;
+   UnaryExpression n2;
+   AssignmentOperator n3;
+   AssignmentExpression n4;
+   ConditionalExpression n5;
+    if (jj_2_13(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_14(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");
+  }
+
+  final public 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 63:
+      n2 = jj_consume_token(63);
+                  n1 = JTBToolkit.makeNodeToken(n2);
+           n0 = new NodeChoice(n1, 0);
+      break;
+    case 67:
+      n4 = jj_consume_token(67);
+                   n3 = JTBToolkit.makeNodeToken(n4);
+           n0 = new NodeChoice(n3, 1);
+      break;
+    case 68:
+      n6 = jj_consume_token(68);
+                   n5 = JTBToolkit.makeNodeToken(n6);
+           n0 = new NodeChoice(n5, 2);
+      break;
+    case 69:
+      n8 = jj_consume_token(69);
+                   n7 = JTBToolkit.makeNodeToken(n8);
+           n0 = new NodeChoice(n7, 3);
+      break;
+    case 70:
+      n10 = jj_consume_token(70);
+                    n9 = JTBToolkit.makeNodeToken(n10);
+           n0 = new NodeChoice(n9, 4);
+      break;
+    case 71:
+      n12 = jj_consume_token(71);
+                    n11 = JTBToolkit.makeNodeToken(n12);
+           n0 = new NodeChoice(n11, 5);
+      break;
+    case 72:
+      n14 = jj_consume_token(72);
+                     n13 = JTBToolkit.makeNodeToken(n14);
+           n0 = new NodeChoice(n13, 6);
+      break;
+    case 73:
+      n16 = jj_consume_token(73);
+                     n15 = JTBToolkit.makeNodeToken(n16);
+           n0 = new NodeChoice(n15, 7);
+      break;
+    case 74:
+      n18 = jj_consume_token(74);
+                    n17 = JTBToolkit.makeNodeToken(n18);
+           n0 = new NodeChoice(n17, 8);
+      break;
+    case 75:
+      n20 = jj_consume_token(75);
+                    n19 = JTBToolkit.makeNodeToken(n20);
+           n0 = new NodeChoice(n19, 9);
+      break;
+    case 76:
+      n22 = jj_consume_token(76);
+                    n21 = JTBToolkit.makeNodeToken(n22);
+           n0 = new NodeChoice(n21, 10);
+      break;
+    default:
+      jj_la1[67] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new AssignmentOperator(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 77:
+        n2 = new NodeSequence(4);
+      n4 = jj_consume_token(77);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = Expression();
+        n2.addNode(n5);
+      n7 = jj_consume_token(64);
+               n6 = JTBToolkit.makeNodeToken(n7);
+        n2.addNode(n6);
+      n8 = ConditionalExpression();
+        n2.addNode(n8);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[68] = jj_gen;
+      ;
+    }
+     {if (true) return new ConditionalExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ConstantExpression ConstantExpression() throws ParseException {
+   ConditionalExpression n0;
+    n0 = ConditionalExpression();
+     {if (true) return new ConstantExpression(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 78:
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(78);
+                n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = LogicalORExpression();
+        n2.addNode(n5);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[69] = jj_gen;
+      ;
+    }
+     {if (true) return new LogicalORExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 79:
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(79);
+                n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = LogicalANDExpression();
+        n2.addNode(n5);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[70] = jj_gen;
+      ;
+    }
+     {if (true) return new LogicalANDExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 80:
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(80);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = InclusiveORExpression();
+        n2.addNode(n5);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[71] = jj_gen;
+      ;
+    }
+     {if (true) return new InclusiveORExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 81:
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(81);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = ExclusiveORExpression();
+        n2.addNode(n5);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[72] = jj_gen;
+      ;
+    }
+     {if (true) return new ExclusiveORExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 82:
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(82);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = ANDExpression();
+        n2.addNode(n5);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[73] = jj_gen;
+      ;
+    }
+     {if (true) return new ANDExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 83:
+    case 84:
+        n2 = new NodeSequence(2);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 83:
+        n5 = jj_consume_token(83);
+                      n4 = JTBToolkit.makeNodeToken(n5);
+              n3 = new NodeChoice(n4, 0);
+        break;
+      case 84:
+        n7 = jj_consume_token(84);
+                      n6 = JTBToolkit.makeNodeToken(n7);
+              n3 = new NodeChoice(n6, 1);
+        break;
+      default:
+        jj_la1[74] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+        n2.addNode(n3);
+      n8 = EqualityExpression();
+        n2.addNode(n8);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[75] = jj_gen;
+      ;
+    }
+     {if (true) return new EqualityExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 85:
+    case 86:
+    case 87:
+    case 88:
+        n2 = new NodeSequence(2);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 85:
+        n5 = jj_consume_token(85);
+                     n4 = JTBToolkit.makeNodeToken(n5);
+              n3 = new NodeChoice(n4, 0);
+        break;
+      case 86:
+        n7 = jj_consume_token(86);
+                     n6 = JTBToolkit.makeNodeToken(n7);
+              n3 = new NodeChoice(n6, 1);
+        break;
+      case 87:
+        n9 = jj_consume_token(87);
+                      n8 = JTBToolkit.makeNodeToken(n9);
+              n3 = new NodeChoice(n8, 2);
+        break;
+      case 88:
+        n11 = jj_consume_token(88);
+                       n10 = JTBToolkit.makeNodeToken(n11);
+              n3 = new NodeChoice(n10, 3);
+        break;
+      default:
+        jj_la1[76] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+        n2.addNode(n3);
+      n12 = RelationalExpression();
+        n2.addNode(n12);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[77] = jj_gen;
+      ;
+    }
+     {if (true) return new RelationalExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 89:
+    case 90:
+        n2 = new NodeSequence(2);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 89:
+        n5 = jj_consume_token(89);
+                      n4 = JTBToolkit.makeNodeToken(n5);
+              n3 = new NodeChoice(n4, 0);
+        break;
+      case 90:
+        n7 = jj_consume_token(90);
+                      n6 = JTBToolkit.makeNodeToken(n7);
+              n3 = new NodeChoice(n6, 1);
+        break;
+      default:
+        jj_la1[78] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+        n2.addNode(n3);
+      n8 = ShiftExpression();
+        n2.addNode(n8);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[79] = jj_gen;
+      ;
+    }
+     {if (true) return new ShiftExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 91:
+    case 92:
+        n2 = new NodeSequence(2);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 91:
+        n5 = jj_consume_token(91);
+                     n4 = JTBToolkit.makeNodeToken(n5);
+              n3 = new NodeChoice(n4, 0);
+        break;
+      case 92:
+        n7 = jj_consume_token(92);
+                     n6 = JTBToolkit.makeNodeToken(n7);
+              n3 = new NodeChoice(n6, 1);
+        break;
+      default:
+        jj_la1[80] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+        n2.addNode(n3);
+      n8 = AdditiveExpression();
+        n2.addNode(n8);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[81] = jj_gen;
+      ;
+    }
+     {if (true) return new AdditiveExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 58:
+    case 93:
+    case 94:
+        n2 = new NodeSequence(2);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 58:
+        n5 = jj_consume_token(58);
+                     n4 = JTBToolkit.makeNodeToken(n5);
+              n3 = new NodeChoice(n4, 0);
+        break;
+      case 93:
+        n7 = jj_consume_token(93);
+                     n6 = JTBToolkit.makeNodeToken(n7);
+              n3 = new NodeChoice(n6, 1);
+        break;
+      case 94:
+        n9 = jj_consume_token(94);
+                     n8 = JTBToolkit.makeNodeToken(n9);
+              n3 = new NodeChoice(n8, 2);
+        break;
+      default:
+        jj_la1[82] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+        n2.addNode(n3);
+      n10 = MultiplicativeExpression();
+        n2.addNode(n10);
+        n1.addNode(n2);
+      break;
+    default:
+      jj_la1[83] = jj_gen;
+      ;
+    }
+     {if (true) return new MultiplicativeExpression(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public CastExpression CastExpression() throws ParseException {
+   NodeChoice n0;
+   NodeSequence n1;
+   NodeToken n2;
+   Token n3;
+   TypeSpecifier n4;
+   NodeToken n5;
+   Token n6;
+   CastExpression n7;
+   UnaryExpression n8;
+    if (jj_2_15(2147483647)) {
+           n1 = new NodeSequence(5);
+      n3 = jj_consume_token(55);
+                  n2 = JTBToolkit.makeNodeToken(n3);
+           n1.addNode(n2);
+      n4 = TypeSpecifier();
+           n1.addNode(n4);
+      n6 = jj_consume_token(56);
+                  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 55:
+      case 58:
+      case 82:
+      case 91:
+      case 92:
+      case 95:
+      case 96:
+      case 97:
+      case 98:
+        n8 = UnaryExpression();
+           n0 = new NodeChoice(n8, 1);
+        break;
+      default:
+        jj_la1[84] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+     {if (true) return new CastExpression(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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;
+   TypeSpecifier n21;
+   NodeToken n22;
+   Token n23;
+    if (jj_2_17(3)) {
+      n1 = PostfixExpression();
+           n0 = new NodeChoice(n1, 0);
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 95:
+           n2 = new NodeSequence(2);
+        n4 = jj_consume_token(95);
+                   n3 = JTBToolkit.makeNodeToken(n4);
+           n2.addNode(n3);
+        n5 = UnaryExpression();
+           n2.addNode(n5);
+           n0 = new NodeChoice(n2, 1);
+        break;
+      case 96:
+           n6 = new NodeSequence(2);
+        n8 = jj_consume_token(96);
+                   n7 = JTBToolkit.makeNodeToken(n8);
+           n6.addNode(n7);
+        n9 = UnaryExpression();
+           n6.addNode(n9);
+           n0 = new NodeChoice(n6, 2);
+        break;
+      case 58:
+      case 82:
+      case 91:
+      case 92:
+      case 97:
+      case 98:
+           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_16(2147483647)) {
+          n17 = UnaryExpression();
+                 n16 = new NodeChoice(n17, 0);
+        } else {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case 55:
+                 n18 = new NodeSequence(3);
+            n20 = jj_consume_token(55);
+                         n19 = JTBToolkit.makeNodeToken(n20);
+                 n18.addNode(n19);
+            n21 = TypeSpecifier();
+                 n18.addNode(n21);
+            n23 = jj_consume_token(56);
+                         n22 = JTBToolkit.makeNodeToken(n23);
+                 n18.addNode(n22);
+                 n16 = new NodeChoice(n18, 1);
+            break;
+          default:
+            jj_la1[85] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        }
+           n13.addNode(n16);
+           n0 = new NodeChoice(n13, 4);
+        break;
+      default:
+        jj_la1[86] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+     {if (true) return new UnaryExpression(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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 82:
+      n2 = jj_consume_token(82);
+                  n1 = JTBToolkit.makeNodeToken(n2);
+           n0 = new NodeChoice(n1, 0);
+      break;
+    case 58:
+      n4 = jj_consume_token(58);
+                  n3 = JTBToolkit.makeNodeToken(n4);
+           n0 = new NodeChoice(n3, 1);
+      break;
+    case 91:
+      n6 = jj_consume_token(91);
+                  n5 = JTBToolkit.makeNodeToken(n6);
+           n0 = new NodeChoice(n5, 2);
+      break;
+    case 92:
+      n8 = jj_consume_token(92);
+                  n7 = JTBToolkit.makeNodeToken(n8);
+           n0 = new NodeChoice(n7, 3);
+      break;
+    case 97:
+      n10 = jj_consume_token(97);
+                   n9 = JTBToolkit.makeNodeToken(n10);
+           n0 = new NodeChoice(n9, 4);
+      break;
+    case 98:
+      n12 = jj_consume_token(98);
+                   n11 = JTBToolkit.makeNodeToken(n12);
+           n0 = new NodeChoice(n11, 5);
+      break;
+    default:
+      jj_la1[87] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new UnaryOperator(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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_12:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 55:
+      case 65:
+      case 95:
+      case 96:
+      case 99:
+      case 100:
+        ;
+        break;
+      default:
+        jj_la1[88] = jj_gen;
+        break label_12;
+      }
+        n12 = new NodeOptional();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 65:
+           n3 = new NodeSequence(3);
+        n5 = jj_consume_token(65);
+                  n4 = JTBToolkit.makeNodeToken(n5);
+           n3.addNode(n4);
+        n6 = Expression();
+           n3.addNode(n6);
+        n8 = jj_consume_token(66);
+                  n7 = JTBToolkit.makeNodeToken(n8);
+           n3.addNode(n7);
+           n2 = new NodeChoice(n3, 0);
+        break;
+      case 55:
+           n9 = new NodeSequence(3);
+        n11 = jj_consume_token(55);
+                   n10 = JTBToolkit.makeNodeToken(n11);
+           n9.addNode(n10);
+        if (jj_2_18(2147483647)) {
+          n13 = ArgumentExpressionList();
+              n12.addNode(n13);
+        } else {
+          ;
+        }
+           n9.addNode(n12);
+        n15 = jj_consume_token(56);
+                   n14 = JTBToolkit.makeNodeToken(n15);
+           n9.addNode(n14);
+           n2 = new NodeChoice(n9, 1);
+        break;
+      case 99:
+           n16 = new NodeSequence(2);
+        n18 = jj_consume_token(99);
+                   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 100:
+           n21 = new NodeSequence(2);
+        n23 = jj_consume_token(100);
+                    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 95:
+        n27 = jj_consume_token(95);
+                    n26 = JTBToolkit.makeNodeToken(n27);
+           n2 = new NodeChoice(n26, 4);
+        break;
+      case 96:
+        n29 = jj_consume_token(96);
+                    n28 = JTBToolkit.makeNodeToken(n29);
+           n2 = new NodeChoice(n28, 5);
+        break;
+      default:
+        jj_la1[89] = 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");
+  }
+
+  final public 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 55:
+        n4 = new NodeSequence(3);
+      n6 = jj_consume_token(55);
+               n5 = JTBToolkit.makeNodeToken(n6);
+        n4.addNode(n5);
+      n7 = Expression();
+        n4.addNode(n7);
+      n9 = jj_consume_token(56);
+               n8 = JTBToolkit.makeNodeToken(n9);
+        n4.addNode(n8);
+        n0 = new NodeChoice(n4, 2);
+      break;
+    default:
+      jj_la1[90] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new PrimaryExpression(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public ArgumentExpressionList ArgumentExpressionList() throws ParseException {
+   AssignmentOrTypeExpression n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   AssignmentOrTypeExpression n5;
+    n0 = AssignmentOrTypeExpression();
+    label_13:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case 59:
+        ;
+        break;
+      default:
+        jj_la1[91] = jj_gen;
+        break label_13;
+      }
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(59);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = AssignmentOrTypeExpression();
+        n2.addNode(n5);
+        n1.addNode(n2);
+    }
+     n1.nodes.trimToSize();
+     {if (true) return new ArgumentExpressionList(n0,n1);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public AssignmentOrTypeExpression AssignmentOrTypeExpression() throws ParseException {
+   NodeChoice n0;
+   NoIdentifierTypeSpecifier n1;
+   AssignmentExpression n2;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case UNSIGNED:
+    case DOUBLE:
+    case STRUCT:
+    case SIGNED:
+    case UNION:
+    case CONST:
+    case FLOAT:
+    case SHORT:
+    case LONG:
+    case ENUM:
+    case VOID:
+    case CHAR:
+    case INT:
+      n1 = NoIdentifierTypeSpecifier();
+        n0 = new NodeChoice(n1, 0);
+      break;
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case CHARACTER_LITERAL:
+    case STRING_LITERAL:
+    case SIZEOF:
+    case IDENTIFIER:
+    case 55:
+    case 58:
+    case 82:
+    case 91:
+    case 92:
+    case 95:
+    case 96:
+    case 97:
+    case 98:
+      n2 = AssignmentExpression();
+        n0 = new NodeChoice(n2, 1);
+      break;
+    default:
+      jj_la1[92] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new AssignmentOrTypeExpression(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public 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[93] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+     {if (true) return new Constant(n0);}
+    throw new Error("Missing return statement in function");
+  }
+
+  private boolean jj_2_1(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(0, xla); }
+  }
+
+  private boolean jj_2_2(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_2(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1, xla); }
+  }
+
+  private boolean jj_2_3(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_3(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(2, xla); }
+  }
+
+  private boolean jj_2_4(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_4(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(3, xla); }
+  }
+
+  private boolean jj_2_5(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_5(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(4, xla); }
+  }
+
+  private boolean jj_2_6(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_6(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(5, xla); }
+  }
+
+  private boolean jj_2_7(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_7(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(6, xla); }
+  }
+
+  private boolean jj_2_8(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_8(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(7, xla); }
+  }
+
+  private boolean jj_2_9(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_9(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(8, xla); }
+  }
+
+  private boolean jj_2_10(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_10(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(9, xla); }
+  }
+
+  private boolean jj_2_11(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_11(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(10, xla); }
+  }
+
+  private boolean jj_2_12(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_12(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(11, xla); }
+  }
+
+  private boolean jj_2_13(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_13(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(12, xla); }
+  }
+
+  private boolean jj_2_14(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_14(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(13, xla); }
+  }
+
+  private boolean jj_2_15(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_15(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(14, xla); }
+  }
+
+  private boolean jj_2_16(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_16(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(15, xla); }
+  }
+
+  private boolean jj_2_17(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_17(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(16, xla); }
+  }
+
+  private boolean jj_2_18(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_18(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(17, xla); }
+  }
+
+  private boolean jj_3R_113() {
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_32()) return true;
+    if (jj_scan_token(56)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_192() {
+    if (jj_scan_token(DOUBLE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_168() {
+    if (jj_3R_123()) return true;
+    return false;
+  }
+
+  private boolean jj_3_6() {
+    if (jj_scan_token(59)) return true;
+    if (jj_3R_19()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_191() {
+    if (jj_scan_token(FLOAT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_112() {
+    if (jj_3R_29()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_203() {
+    if (jj_scan_token(LONG)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_167() {
+    if (jj_scan_token(CONST)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_97() {
+    if (jj_3R_19()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_6()) { jj_scanpos = xsp; break; }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_136()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_123() {
+    if (jj_scan_token(58)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_167()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_168()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_190() {
+    if (jj_scan_token(LONG)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_203()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_63() {
+    if (jj_scan_token(SIZEOF)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_112()) {
+    jj_scanpos = xsp;
+    if (jj_3R_113()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_161() {
+    if (jj_scan_token(79)) return true;
+    if (jj_3R_114()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_189() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_202() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_114() {
+    if (jj_3R_160()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_161()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_62() {
+    if (jj_3R_111()) return true;
+    if (jj_3R_33()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_188() {
+    if (jj_scan_token(SHORT)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_202()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_61() {
+    if (jj_scan_token(96)) return true;
+    if (jj_3R_29()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_187() {
+    if (jj_scan_token(CHAR)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_142() {
+    if (jj_3R_97()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_186() {
+    if (jj_scan_token(VOID)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_104() {
+    if (jj_scan_token(63)) return true;
+    if (jj_3R_106()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_60() {
+    if (jj_scan_token(95)) return true;
+    if (jj_3R_29()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_47() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_104()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3_17() {
+    if (jj_3R_34()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_185() {
+    if (jj_scan_token(CONST)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_102() {
+    if (jj_3R_32()) return true;
+    if (jj_scan_token(55)) return true;
+    if (jj_scan_token(58)) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_scan_token(56)) return true;
+    if (jj_scan_token(55)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_142()) jj_scanpos = xsp;
+    if (jj_scan_token(56)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_115() {
+    if (jj_scan_token(78)) return true;
+    if (jj_3R_75()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_172() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_185()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_186()) {
+    jj_scanpos = xsp;
+    if (jj_3R_187()) {
+    jj_scanpos = xsp;
+    if (jj_3R_188()) {
+    jj_scanpos = xsp;
+    if (jj_3R_189()) {
+    jj_scanpos = xsp;
+    if (jj_3R_190()) {
+    jj_scanpos = xsp;
+    if (jj_3R_191()) {
+    jj_scanpos = xsp;
+    if (jj_3R_192()) {
+    jj_scanpos = xsp;
+    if (jj_3R_193()) {
+    jj_scanpos = xsp;
+    if (jj_3R_194()) {
+    jj_scanpos = xsp;
+    if (jj_3R_195()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_196()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_197()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_75() {
+    if (jj_3R_114()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_115()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_146() {
+    if (jj_scan_token(SWITCH)) return true;
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_116()) return true;
+    if (jj_scan_token(56)) return true;
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_29() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_17()) {
+    jj_scanpos = xsp;
+    if (jj_3R_60()) {
+    jj_scanpos = xsp;
+    if (jj_3R_61()) {
+    jj_scanpos = xsp;
+    if (jj_3R_62()) {
+    jj_scanpos = xsp;
+    if (jj_3R_63()) return true;
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3_12() {
+    if (jj_scan_token(ELSE)) return true;
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_48() {
+    if (jj_scan_token(59)) return true;
+    if (jj_3R_47()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_106() {
+    if (jj_3R_31()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_24() {
+    if (jj_3R_47()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_48()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_18() {
+    if (jj_3R_15()) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_145() {
+    if (jj_scan_token(IF)) return true;
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_116()) return true;
+    if (jj_scan_token(56)) return true;
+    if (jj_3R_28()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_12()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3_5() {
+    if (jj_3R_18()) return true;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_108() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_145()) {
+    jj_scanpos = xsp;
+    if (jj_3R_146()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_166() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_43() {
+    if (jj_3R_102()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_92() {
+    if (jj_3R_29()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_76() {
+    if (jj_scan_token(77)) return true;
+    if (jj_3R_116()) return true;
+    if (jj_scan_token(64)) return true;
+    if (jj_3R_31()) return true;
+    return false;
+  }
+
+  private boolean jj_3_15() {
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_32()) return true;
+    if (jj_scan_token(56)) return true;
+    if (jj_3R_33()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_42() {
+    if (jj_3R_18()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_31() {
+    if (jj_3R_75()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_76()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_23() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_91() {
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_32()) return true;
+    if (jj_scan_token(56)) return true;
+    if (jj_3R_33()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_17() {
+    if (jj_scan_token(TYPEDEF)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_42()) {
+    jj_scanpos = xsp;
+    if (jj_3R_43()) return true;
+    }
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3_8() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_23()) jj_scanpos = xsp;
+    if (jj_scan_token(61)) return true;
+    if (jj_3R_24()) return true;
+    if (jj_scan_token(62)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_33() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_91()) {
+    jj_scanpos = xsp;
+    if (jj_3R_92()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_122() {
+    if (jj_scan_token(ENUM)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_8()) {
+    jj_scanpos = xsp;
+    if (jj_3R_166()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_74() {
+    if (jj_scan_token(76)) return true;
+    return false;
+  }
+
+  private boolean jj_3_11() {
+    if (jj_3R_27()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_73() {
+    if (jj_scan_token(75)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_90() {
+    if (jj_3R_124()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_72() {
+    if (jj_scan_token(74)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_175() {
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_71() {
+    if (jj_scan_token(73)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_89() {
+    if (jj_3R_123()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_70() {
+    if (jj_scan_token(72)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_174() {
+    if (jj_3R_27()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_88() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_69() {
+    if (jj_scan_token(71)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_244() {
+    if (jj_scan_token(94)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_87() {
+    if (jj_3R_122()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_137() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_174()) {
+    jj_scanpos = xsp;
+    if (jj_3R_175()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_68() {
+    if (jj_scan_token(70)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_243() {
+    if (jj_scan_token(93)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_86() {
+    if (jj_3R_15()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_179() {
+    if (jj_scan_token(LONG)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_67() {
+    if (jj_scan_token(69)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_242() {
+    if (jj_scan_token(58)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_98() {
+    if (jj_scan_token(61)) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_137()) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(62)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_199() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_66() {
+    if (jj_scan_token(68)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_183() {
+    if (jj_scan_token(STRING_LITERAL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_65() {
+    if (jj_scan_token(67)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_165() {
+    if (jj_scan_token(LONG)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_179()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_182() {
+    if (jj_scan_token(CHARACTER_LITERAL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_38() {
+    if (jj_3R_98()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_64() {
+    if (jj_scan_token(63)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_239() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_242()) {
+    jj_scanpos = xsp;
+    if (jj_3R_243()) {
+    jj_scanpos = xsp;
+    if (jj_3R_244()) return true;
+    }
+    }
+    if (jj_3R_235()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_208() {
+    if (jj_scan_token(64)) return true;
+    if (jj_3R_106()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_164() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_181() {
+    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_37() {
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_207() {
+    if (jj_3R_124()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_178() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_180() {
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_235() {
+    if (jj_3R_33()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_239()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_198() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_207()) {
+    jj_scanpos = xsp;
+    if (jj_3R_208()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_30() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_64()) {
+    jj_scanpos = xsp;
+    if (jj_3R_65()) {
+    jj_scanpos = xsp;
+    if (jj_3R_66()) {
+    jj_scanpos = xsp;
+    if (jj_3R_67()) {
+    jj_scanpos = xsp;
+    if (jj_3R_68()) {
+    jj_scanpos = xsp;
+    if (jj_3R_69()) {
+    jj_scanpos = xsp;
+    if (jj_3R_70()) {
+    jj_scanpos = xsp;
+    if (jj_3R_71()) {
+    jj_scanpos = xsp;
+    if (jj_3R_72()) {
+    jj_scanpos = xsp;
+    if (jj_3R_73()) {
+    jj_scanpos = xsp;
+    if (jj_3R_74()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_170() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_180()) {
+    jj_scanpos = xsp;
+    if (jj_3R_181()) {
+    jj_scanpos = xsp;
+    if (jj_3R_182()) {
+    jj_scanpos = xsp;
+    if (jj_3R_183()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_163() {
+    if (jj_scan_token(SHORT)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_178()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_144() {
+    if (jj_3R_116()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_36() {
+    if (jj_3R_97()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_162() {
+    if (jj_scan_token(CHAR)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_103() {
+    if (jj_3R_32()) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_198()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_199()) jj_scanpos = xsp;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_107() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_144()) jj_scanpos = xsp;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_14() {
+    if (jj_3R_32()) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_scan_token(55)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_36()) jj_scanpos = xsp;
+    if (jj_scan_token(56)) return true;
+    xsp = jj_scanpos;
+    if (jj_3R_37()) {
+    jj_scanpos = xsp;
+    if (jj_3R_38()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_121() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_162()) {
+    jj_scanpos = xsp;
+    if (jj_3R_163()) {
+    jj_scanpos = xsp;
+    if (jj_3R_164()) {
+    jj_scanpos = xsp;
+    if (jj_3R_165()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_120() {
+    if (jj_scan_token(UNSIGNED)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_119() {
+    if (jj_scan_token(SIGNED)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_241() {
+    if (jj_scan_token(92)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_135() {
+    if (jj_3R_105()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_240() {
+    if (jj_scan_token(91)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_134() {
+    if (jj_3R_172()) return true;
+    return false;
+  }
+
+  private boolean jj_3_4() {
+    if (jj_3R_17()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_53() {
+    if (jj_scan_token(DFLT)) return true;
+    if (jj_scan_token(64)) return true;
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_95() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_134()) {
+    jj_scanpos = xsp;
+    if (jj_3R_135()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3_3() {
+    if (jj_3R_16()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_85() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_119()) {
+    jj_scanpos = xsp;
+    if (jj_3R_120()) return true;
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_121()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_84() {
+    if (jj_scan_token(DOUBLE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_236() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_240()) {
+    jj_scanpos = xsp;
+    if (jj_3R_241()) return true;
+    }
+    if (jj_3R_229()) return true;
+    return false;
+  }
+
+  private boolean jj_3_2() {
+    if (jj_3R_15()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_83() {
+    if (jj_scan_token(FLOAT)) return true;
+    return false;
+  }
+
+  private boolean jj_3_14() {
+    if (jj_3R_31()) return true;
+    return false;
+  }
+
+  private boolean jj_3_13() {
+    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_141() {
+    if (jj_scan_token(63)) return true;
+    if (jj_3R_25()) return true;
+    return false;
+  }
+
+  private boolean jj_3_1() {
+    if (jj_3R_14()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_229() {
+    if (jj_3R_235()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_236()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_118() {
+    if (jj_scan_token(LONG)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_52() {
+    if (jj_scan_token(CASE)) return true;
+    if (jj_3R_106()) return true;
+    if (jj_scan_token(64)) return true;
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_140() {
+    if (jj_3R_124()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_143() {
+    if (jj_3R_29()) return true;
+    if (jj_3R_30()) return true;
+    if (jj_3R_105()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_82() {
+    if (jj_scan_token(LONG)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_118()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_100() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_140()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_141()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_96() {
+    if (jj_scan_token(59)) return true;
+    if (jj_3R_95()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_51() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_scan_token(64)) return true;
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_81() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_105() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_143()) {
+    jj_scanpos = xsp;
+    if (jj_3_14()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_35() {
+    if (jj_3R_95()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_96()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_117() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_26() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_51()) {
+    jj_scanpos = xsp;
+    if (jj_3R_52()) {
+    jj_scanpos = xsp;
+    if (jj_3R_53()) return true;
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_238() {
+    if (jj_scan_token(90)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_80() {
+    if (jj_scan_token(SHORT)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_117()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_237() {
+    if (jj_scan_token(89)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_79() {
+    if (jj_scan_token(CHAR)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_78() {
+    if (jj_scan_token(VOID)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_101() {
+    if (jj_scan_token(59)) return true;
+    if (jj_3R_100()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_230() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_237()) {
+    jj_scanpos = xsp;
+    if (jj_3R_238()) return true;
+    }
+    if (jj_3R_221()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_184() {
+    if (jj_scan_token(59)) return true;
+    if (jj_3R_105()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_77() {
+    if (jj_scan_token(CONST)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_127() {
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_116()) return true;
+    if (jj_scan_token(56)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_41() {
+    if (jj_3R_100()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_101()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_221() {
+    if (jj_3R_229()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_230()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_116() {
+    if (jj_3R_105()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_184()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_32() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_77()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    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()) {
+    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()) {
+    jj_scanpos = xsp;
+    if (jj_3R_87()) {
+    jj_scanpos = xsp;
+    if (jj_3R_88()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_89()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_90()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_126() {
+    if (jj_3R_170()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_125() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_93() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_125()) {
+    jj_scanpos = xsp;
+    if (jj_3R_126()) {
+    jj_scanpos = xsp;
+    if (jj_3R_127()) return true;
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_59() {
+    if (jj_3R_110()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_58() {
+    if (jj_3R_109()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_57() {
+    if (jj_3R_108()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_46() {
+    if (jj_3R_103()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_228() {
+    if (jj_3R_116()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_56() {
+    if (jj_3R_98()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_234() {
+    if (jj_scan_token(88)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_22() {
+    Token xsp;
+    if (jj_3R_46()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_46()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_55() {
+    if (jj_3R_107()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_233() {
+    if (jj_scan_token(87)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_153() {
+    if (jj_scan_token(RETURN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_228()) jj_scanpos = xsp;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3_10() {
+    if (jj_3R_26()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_232() {
+    if (jj_scan_token(86)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_133() {
+    if (jj_scan_token(96)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_231() {
+    if (jj_scan_token(85)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_152() {
+    if (jj_scan_token(BREAK)) return true;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_45() {
+    if (jj_scan_token(UNION)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_132() {
+    if (jj_scan_token(95)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_28() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_10()) {
+    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()) return true;
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_44() {
+    if (jj_scan_token(STRUCT)) return true;
+    return false;
+  }
+
+  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_3R_217()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_151() {
+    if (jj_scan_token(CONTINUE)) return true;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_131() {
+    if (jj_scan_token(100)) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3_18() {
+    if (jj_3R_35()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_20() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_44()) {
+    jj_scanpos = xsp;
+    if (jj_3R_45()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_217() {
+    if (jj_3R_221()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_222()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_130() {
+    if (jj_scan_token(99)) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_150() {
+    if (jj_scan_token(GOTO)) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_171() {
+    if (jj_3R_35()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_169() {
+    if (jj_3R_106()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_110() {
+    Token xsp;
+    xsp = jj_scanpos;
+    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;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_124() {
+    if (jj_scan_token(65)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_169()) jj_scanpos = xsp;
+    if (jj_scan_token(66)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_129() {
+    if (jj_scan_token(55)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_171()) jj_scanpos = xsp;
+    if (jj_scan_token(56)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_39() {
+    if (jj_3R_20()) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_224() {
+    if (jj_scan_token(84)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_128() {
+    if (jj_scan_token(65)) return true;
+    if (jj_3R_116()) return true;
+    if (jj_scan_token(66)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_139() {
+    if (jj_scan_token(REGISTER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_223() {
+    if (jj_scan_token(83)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_21() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_138() {
+    if (jj_scan_token(AUTO)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_94() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_128()) {
+    jj_scanpos = xsp;
+    if (jj_3R_129()) {
+    jj_scanpos = xsp;
+    if (jj_3R_130()) {
+    jj_scanpos = xsp;
+    if (jj_3R_131()) {
+    jj_scanpos = xsp;
+    if (jj_3R_132()) {
+    jj_scanpos = xsp;
+    if (jj_3R_133()) return true;
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_99() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_138()) {
+    jj_scanpos = xsp;
+    if (jj_3R_139()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_34() {
+    if (jj_3R_93()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_94()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3_7() {
+    if (jj_3R_20()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_21()) jj_scanpos = xsp;
+    if (jj_scan_token(61)) return true;
+    if (jj_3R_22()) return true;
+    if (jj_scan_token(62)) return true;
+    return false;
+  }
+
+  private boolean jj_3_9() {
+    if (jj_scan_token(59)) return true;
+    if (jj_3R_25()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_218() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_223()) {
+    jj_scanpos = xsp;
+    if (jj_3R_224()) return true;
+    }
+    if (jj_3R_211()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_40() {
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_99()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_15() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_7()) {
+    jj_scanpos = xsp;
+    if (jj_3R_39()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_209() {
+    if (jj_3R_25()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_9()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_211() {
+    if (jj_3R_217()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_218()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_227() {
+    if (jj_3R_116()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_54() {
+    if (jj_scan_token(STATIC)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_226() {
+    if (jj_3R_116()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_210() {
+    if (jj_scan_token(59)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_27() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_54()) jj_scanpos = xsp;
+    if (jj_3R_16()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_225() {
+    if (jj_3R_116()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_212() {
+    if (jj_scan_token(82)) return true;
+    if (jj_3R_200()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_197() {
+    if (jj_3R_124()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_50() {
+    if (jj_scan_token(61)) return true;
+    if (jj_3R_209()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_210()) jj_scanpos = xsp;
+    if (jj_scan_token(62)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_196() {
+    if (jj_3R_123()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_200() {
+    if (jj_3R_211()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_212()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_49() {
+    if (jj_3R_105()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_195() {
+    if (jj_3R_122()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_159() {
+    if (jj_scan_token(98)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_149() {
+    if (jj_scan_token(FOR)) return true;
+    if (jj_scan_token(55)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_225()) jj_scanpos = xsp;
+    if (jj_scan_token(57)) return true;
+    xsp = jj_scanpos;
+    if (jj_3R_226()) jj_scanpos = xsp;
+    if (jj_scan_token(57)) return true;
+    xsp = jj_scanpos;
+    if (jj_3R_227()) jj_scanpos = xsp;
+    if (jj_scan_token(56)) return true;
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_194() {
+    if (jj_3R_15()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_220() {
+    if (jj_scan_token(LONG)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_158() {
+    if (jj_scan_token(97)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_16() {
+    if (jj_3R_40()) return true;
+    if (jj_3R_32()) return true;
+    if (jj_3R_41()) return true;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_25() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_49()) {
+    jj_scanpos = xsp;
+    if (jj_3R_50()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_157() {
+    if (jj_scan_token(92)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_156() {
+    if (jj_scan_token(91)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_216() {
+    if (jj_scan_token(LONG)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_220()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_155() {
+    if (jj_scan_token(58)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_215() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_154() {
+    if (jj_scan_token(82)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_219() {
+    if (jj_scan_token(INT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_201() {
+    if (jj_scan_token(81)) return true;
+    if (jj_3R_176()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_148() {
+    if (jj_scan_token(DO)) return true;
+    if (jj_3R_28()) return true;
+    if (jj_scan_token(WHILE)) return true;
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_116()) return true;
+    if (jj_scan_token(56)) return true;
+    if (jj_scan_token(57)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_173() {
+    if (jj_3R_124()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_176() {
+    if (jj_3R_200()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_201()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_214() {
+    if (jj_scan_token(SHORT)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_219()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_111() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_154()) {
+    jj_scanpos = xsp;
+    if (jj_3R_155()) {
+    jj_scanpos = xsp;
+    if (jj_3R_156()) {
+    jj_scanpos = xsp;
+    if (jj_3R_157()) {
+    jj_scanpos = xsp;
+    if (jj_3R_158()) {
+    jj_scanpos = xsp;
+    if (jj_3R_159()) return true;
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_19() {
+    if (jj_3R_32()) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_173()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_213() {
+    if (jj_scan_token(CHAR)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_147() {
+    if (jj_scan_token(WHILE)) return true;
+    if (jj_scan_token(55)) return true;
+    if (jj_3R_116()) return true;
+    if (jj_scan_token(56)) return true;
+    if (jj_3R_28()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_206() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_213()) {
+    jj_scanpos = xsp;
+    if (jj_3R_214()) {
+    jj_scanpos = xsp;
+    if (jj_3R_215()) {
+    jj_scanpos = xsp;
+    if (jj_3R_216()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_205() {
+    if (jj_scan_token(UNSIGNED)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_109() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_147()) {
+    jj_scanpos = xsp;
+    if (jj_3R_148()) {
+    jj_scanpos = xsp;
+    if (jj_3R_149()) return true;
+    }
+    }
+    return false;
+  }
+
+  private boolean jj_3R_204() {
+    if (jj_scan_token(SIGNED)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_177() {
+    if (jj_scan_token(80)) return true;
+    if (jj_3R_160()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_136() {
+    if (jj_scan_token(59)) return true;
+    if (jj_scan_token(60)) return true;
+    return false;
+  }
+
+  private boolean jj_3_16() {
+    if (jj_3R_29()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_160() {
+    if (jj_3R_176()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_177()) jj_scanpos = xsp;
+    return false;
+  }
+
+  private boolean jj_3R_193() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_204()) {
+    jj_scanpos = xsp;
+    if (jj_3R_205()) return true;
+    }
+    xsp = jj_scanpos;
+    if (jj_3R_206()) jj_scanpos = xsp;
+    return false;
+  }
+
+  /** Generated Token Manager. */
+  public CParserTokenManager token_source;
+  SimpleCharStream jj_input_stream;
+  /** Current token. */
+  public Token token;
+  /** Next token. */
+  public Token jj_nt;
+  private int jj_ntk;
+  private Token jj_scanpos, jj_lastpos;
+  private int jj_la;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[94];
+  static private int[] jj_la1_0;
+  static private int[] jj_la1_1;
+  static private int[] jj_la1_2;
+  static private int[] jj_la1_3;
+  static {
+      jj_la1_init_0();
+      jj_la1_init_1();
+      jj_la1_init_2();
+      jj_la1_init_3();
+   }
+   private static void jj_la1_init_0() {
+      jj_la1_0 = new int[] {0xc5c00000,0x40000000,0x84800000,0x0,0x40000000,0x84800000,0x84800000,0x0,0x0,0x0,0x400000,0x400000,0x0,0x0,0x0,0x800000,0x0,0x0,0x0,0x0,0x84800000,0x0,0x0,0x0,0x0,0x0,0x800000,0x0,0x0,0x0,0x0,0x84800000,0x0,0x0,0x0,0x80000000,0x80000000,0x84800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80d1000,0x80d1000,0x381d1000,0x2000000,0x80d1000,0xbedd1000,0x3a1d1000,0x10000000,0x80d1000,0x80d1000,0x80d1000,0x0,0x80d1000,0x20100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80d1000,0x0,0x8000000,0x0,0x0,0x0,0xd1000,0x0,0x8c8d1000,0xd1000,};
+   }
+   private static void jj_la1_init_1() {
+      jj_la1_1 = new int[] {0x127cf3,0x1,0x126cf2,0x22000000,0x1,0x126cf2,0x126cf2,0x8000000,0x0,0x1,0x1000,0x1000,0x20,0x20000,0x400,0x2,0x20000,0x400,0x24480,0x24480,0x126cd2,0x4000000,0x0,0x20,0x20000,0x400,0x2,0x20000,0x400,0x24480,0x24480,0x26cd2,0x4000000,0x0,0x100000,0x10,0x10,0x126cf2,0x8000000,0x0,0x80000000,0x0,0x0,0x100000,0x100000,0x100000,0x8000000,0x80000000,0x20,0x4000000,0x8000000,0x8000000,0x24900000,0x4900000,0x269d800c,0x100200,0x4900000,0x269ffeff,0x269d820c,0x40000,0x4900000,0x4900000,0x4900000,0x90004,0x4900000,0x8008,0x8000000,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x4900000,0x800000,0x4000000,0x4000000,0x800000,0x800000,0x900000,0x8000000,0x4926cf2,0x0,};
+   }
+   private static void jj_la1_init_2() {
+      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98040000,0x98040000,0x98040000,0x0,0x98040000,0x98040000,0x98040000,0x0,0x98040000,0x98040000,0x98040000,0x0,0x98040000,0x0,0x0,0x1ff8,0x2000,0x4000,0x8000,0x10000,0x20000,0x40000,0x180000,0x180000,0x1e00000,0x1e00000,0x6000000,0x6000000,0x18000000,0x18000000,0x60000000,0x60000000,0x98040000,0x0,0x98040000,0x18040000,0x80000002,0x80000002,0x0,0x0,0x98040000,0x0,};
+   }
+   private static void jj_la1_init_3() {
+      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,0x7,0x0,0x7,0x7,0x7,0x0,0x7,0x7,0x7,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x7,0x6,0x19,0x19,0x0,0x0,0x7,0x0,};
+   }
+  final private JJCalls[] jj_2_rtns = new JJCalls[18];
+  private boolean jj_rescan = false;
+  private int jj_gc = 0;
+
+  /** Constructor with InputStream. */
+  public GNUnetParser(java.io.InputStream stream) {
+     this(stream, null);
+  }
+  /** Constructor with InputStream and supplied encoding */
+  public GNUnetParser(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source = new CParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream stream) {
+     ReInit(stream, null);
+  }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  /** Constructor. */
+  public GNUnetParser(java.io.Reader stream) {
+    jj_input_stream = new SimpleCharStream(stream, 1, 1);
+    token_source = new CParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  /** Constructor with generated Token Manager. */
+  public GNUnetParser(CParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  /** Reinitialise. */
+  public void ReInit(CParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 94; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
+
+  private Token jj_consume_token(int kind) throws ParseException {
+    Token oldToken;
+    if ((oldToken = token).next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    if (token.kind == kind) {
+      jj_gen++;
+      if (++jj_gc > 100) {
+        jj_gc = 0;
+        for (int i = 0; i < jj_2_rtns.length; i++) {
+          JJCalls c = jj_2_rtns[i];
+          while (c != null) {
+            if (c.gen < jj_gen) c.first = null;
+            c = c.next;
+          }
+        }
+      }
+      return token;
+    }
+    token = oldToken;
+    jj_kind = kind;
+    throw generateParseException();
+  }
+
+  static private final class LookaheadSuccess extends java.lang.Error { }
+  final private LookaheadSuccess jj_ls = new LookaheadSuccess();
+  private boolean jj_scan_token(int kind) {
+    if (jj_scanpos == jj_lastpos) {
+      jj_la--;
+      if (jj_scanpos.next == null) {
+        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
+      } else {
+        jj_lastpos = jj_scanpos = jj_scanpos.next;
+      }
+    } else {
+      jj_scanpos = jj_scanpos.next;
+    }
+    if (jj_rescan) {
+      int i = 0; Token tok = token;
+      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
+      if (tok != null) jj_add_error_token(kind, i);
+    }
+    if (jj_scanpos.kind != kind) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
+    return false;
+  }
+
+
+/** Get the next Token. */
+  final public Token getNextToken() {
+    if (token.next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    jj_gen++;
+    return token;
+  }
+
+/** Get the specific Token. */
+  final public Token getToken(int index) {
+    Token t = token;
+    for (int i = 0; i < index; i++) {
+      if (t.next != null) t = t.next;
+      else t = t.next = token_source.getNextToken();
+    }
+    return t;
+  }
+
+  private int jj_ntk() {
+    if ((jj_nt=token.next) == null)
+      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
+    else
+      return (jj_ntk = jj_nt.kind);
+  }
+
+  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+  private int[] jj_lasttokens = new int[100];
+  private int jj_endpos;
+
+  private void jj_add_error_token(int kind, int pos) {
+    if (pos >= 100) return;
+    if (pos == jj_endpos + 1) {
+      jj_lasttokens[jj_endpos++] = kind;
+    } else if (jj_endpos != 0) {
+      jj_expentry = new int[jj_endpos];
+      for (int i = 0; i < jj_endpos; i++) {
+        jj_expentry[i] = jj_lasttokens[i];
+      }
+      jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
+        int[] oldentry = (int[])(it.next());
+        if (oldentry.length == jj_expentry.length) {
+          for (int i = 0; i < jj_expentry.length; i++) {
+            if (oldentry[i] != jj_expentry[i]) {
+              continue jj_entries_loop;
+            }
+          }
+          jj_expentries.add(jj_expentry);
+          break jj_entries_loop;
+        }
+      }
+      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
+    }
+  }
+
+  /** Generate ParseException. */
+  public ParseException generateParseException() {
+    jj_expentries.clear();
+    boolean[] la1tokens = new boolean[101];
+    if (jj_kind >= 0) {
+      la1tokens[jj_kind] = true;
+      jj_kind = -1;
+    }
+    for (int i = 0; i < 94; i++) {
+      if (jj_la1[i] == jj_gen) {
+        for (int j = 0; j < 32; j++) {
+          if ((jj_la1_0[i] & (1<<j)) != 0) {
+            la1tokens[j] = true;
+          }
+          if ((jj_la1_1[i] & (1<<j)) != 0) {
+            la1tokens[32+j] = true;
+          }
+          if ((jj_la1_2[i] & (1<<j)) != 0) {
+            la1tokens[64+j] = true;
+          }
+          if ((jj_la1_3[i] & (1<<j)) != 0) {
+            la1tokens[96+j] = true;
+          }
+        }
+      }
+    }
+    for (int i = 0; i < 101; i++) {
+      if (la1tokens[i]) {
+        jj_expentry = new int[1];
+        jj_expentry[0] = i;
+        jj_expentries.add(jj_expentry);
+      }
+    }
+    jj_endpos = 0;
+    jj_rescan_token();
+    jj_add_error_token(0, 0);
+    int[][] exptokseq = new int[jj_expentries.size()][];
+    for (int i = 0; i < jj_expentries.size(); i++) {
+      exptokseq[i] = jj_expentries.get(i);
+    }
+    return new ParseException(token, exptokseq, tokenImage);
+  }
+
+  /** Enable tracing. */
+  final public void enable_tracing() {
+  }
+
+  /** Disable tracing. */
+  final public void disable_tracing() {
+  }
+
+  private void jj_rescan_token() {
+    jj_rescan = true;
+    for (int i = 0; i < 18; i++) {
+    try {
+      JJCalls p = jj_2_rtns[i];
+      do {
+        if (p.gen > jj_gen) {
+          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
+          switch (i) {
+            case 0: jj_3_1(); break;
+            case 1: jj_3_2(); break;
+            case 2: jj_3_3(); break;
+            case 3: jj_3_4(); break;
+            case 4: jj_3_5(); break;
+            case 5: jj_3_6(); break;
+            case 6: jj_3_7(); break;
+            case 7: jj_3_8(); break;
+            case 8: jj_3_9(); break;
+            case 9: jj_3_10(); break;
+            case 10: jj_3_11(); break;
+            case 11: jj_3_12(); break;
+            case 12: jj_3_13(); break;
+            case 13: jj_3_14(); break;
+            case 14: jj_3_15(); break;
+            case 15: jj_3_16(); break;
+            case 16: jj_3_17(); break;
+            case 17: jj_3_18(); break;
+          }
+        }
+        p = p.next;
+      } while (p != null);
+      } catch(LookaheadSuccess ls) { }
+    }
+    jj_rescan = false;
+  }
+
+  private void jj_save(int index, int xla) {
+    JJCalls p = jj_2_rtns[index];
+    while (p.gen > jj_gen) {
+      if (p.next == null) { p = p.next = new JJCalls(); break; }
+      p = p.next;
+    }
+    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
+  }
+
+  static final class JJCalls {
+    int gen;
+    Token first;
+    int arg;
+    JJCalls next;
+  }
+
+}
+
+class JTBToolkit {
+   static NodeToken makeNodeToken(Token t) {
+      return new NodeToken(t.image.intern(), t.kind, t.beginLine, t.beginColumn, t.endLine, t.endColumn);
+   }
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/ParseException.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/ParseException.java
new file mode 100644 (file)
index 0000000..44162fe
--- /dev/null
@@ -0,0 +1,186 @@
+package org.gnunet.seaspider.parser;
+/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 5.0 */
+/* JavaCCOptions:KEEP_LINE_COL=null */
+/**
+ * This exception is thrown when parse errors are encountered.
+ * You can explicitly create objects of this exception type by
+ * calling the method generateParseException in the generated
+ * parser.
+ *
+ * You can modify this class to customize your error reporting
+ * mechanisms so long as you retain the public fields.
+ */
+public class ParseException extends Exception {
+
+  /**
+   * The version identifier for this Serializable class.
+   * Increment only if the <i>serialized</i> form of the
+   * class changes.
+   */
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * This constructor is used by the method "generateParseException"
+   * in the generated parser.  Calling this constructor generates
+   * a new object of this type with the fields "currentToken",
+   * "expectedTokenSequences", and "tokenImage" set.
+   */
+  public ParseException(Token currentTokenVal,
+                        int[][] expectedTokenSequencesVal,
+                        String[] tokenImageVal
+                       )
+  {
+    super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal));
+    currentToken = currentTokenVal;
+    expectedTokenSequences = expectedTokenSequencesVal;
+    tokenImage = tokenImageVal;
+  }
+
+  /**
+   * The following constructors are for use by you for whatever
+   * purpose you can think of.  Constructing the exception in this
+   * manner makes the exception behave in the normal way - i.e., as
+   * documented in the class "Throwable".  The fields "errorToken",
+   * "expectedTokenSequences", and "tokenImage" do not contain
+   * relevant information.  The JavaCC generated code does not use
+   * these constructors.
+   */
+
+  public ParseException() {
+    super();
+  }
+
+  /** Constructor with message. */
+  public ParseException(String message) {
+    super(message);
+  }
+
+
+  /**
+   * This is the last token that has been consumed successfully.  If
+   * this object has been created due to a parse error, the token
+   * followng this token will (therefore) be the first error token.
+   */
+  public Token currentToken;
+
+  /**
+   * Each entry in this array is an array of integers.  Each array
+   * of integers represents a sequence of tokens (by their ordinal
+   * values) that is expected at this point of the parse.
+   */
+  public int[][] expectedTokenSequences;
+
+  /**
+   * This is a reference to the "tokenImage" array of the generated
+   * parser within which the parse error occurred.  This array is
+   * defined in the generated ...Constants interface.
+   */
+  public String[] tokenImage;
+
+  /**
+   * It uses "currentToken" and "expectedTokenSequences" to generate a parse
+   * error message and returns it.  If this object has been created
+   * due to a parse error, and you do not catch it (it gets thrown
+   * from the parser) the correct error message
+   * gets displayed.
+   */
+  private static String initialise(Token currentToken,
+                           int[][] expectedTokenSequences,
+                           String[] tokenImage) {
+    String eol = System.getProperty("line.separator", "\n");
+    StringBuffer expected = new StringBuffer();
+    int maxSize = 0;
+    for (int i = 0; i < expectedTokenSequences.length; i++) {
+      if (maxSize < expectedTokenSequences[i].length) {
+        maxSize = expectedTokenSequences[i].length;
+      }
+      for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+        expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');
+      }
+      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
+        expected.append("...");
+      }
+      expected.append(eol).append("    ");
+    }
+    String retval = "Encountered \"";
+    Token tok = currentToken.next;
+    for (int i = 0; i < maxSize; i++) {
+      if (i != 0) retval += " ";
+      if (tok.kind == 0) {
+        retval += tokenImage[0];
+        break;
+      }
+      retval += " " + tokenImage[tok.kind];
+      retval += " \"";
+      retval += add_escapes(tok.image);
+      retval += " \"";
+      tok = tok.next;
+    }
+    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
+    retval += "." + eol;
+    if (expectedTokenSequences.length == 1) {
+      retval += "Was expecting:" + eol + "    ";
+    } else {
+      retval += "Was expecting one of:" + eol + "    ";
+    }
+    retval += expected.toString();
+    return retval;
+  }
+
+  /**
+   * The end of line string for this machine.
+   */
+  protected String eol = System.getProperty("line.separator", "\n");
+
+  /**
+   * Used to convert raw characters to their escaped version
+   * when these raw version cannot be used as part of an ASCII
+   * string literal.
+   */
+  static String add_escapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+}
+/* JavaCC - OriginalChecksum=c5a983a229aa877dc2b3b3b9933cdd6b (do not edit this line) */
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/SimpleCharStream.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/SimpleCharStream.java
new file mode 100644 (file)
index 0000000..8f115d5
--- /dev/null
@@ -0,0 +1,470 @@
+package org.gnunet.seaspider.parser;
+/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */
+/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
+/**
+ * An implementation of interface CharStream, where the stream is assumed to
+ * contain only ASCII characters (without unicode processing).
+ */
+
+public class SimpleCharStream
+{
+/** Whether parser is static. */
+  public static final boolean staticFlag = false;
+  int bufsize;
+  int available;
+  int tokenBegin;
+/** Position in buffer. */
+  public int bufpos = -1;
+  protected int bufline[];
+  protected int bufcolumn[];
+
+  protected int column = 0;
+  protected int line = 1;
+
+  protected boolean prevCharIsCR = false;
+  protected boolean prevCharIsLF = false;
+
+  protected java.io.Reader inputStream;
+
+  protected char[] buffer;
+  protected int maxNextCharInd = 0;
+  protected int inBuf = 0;
+  protected int tabSize = 8;
+
+  protected void setTabSize(int i) { tabSize = i; }
+  protected int getTabSize(int i) { return tabSize; }
+
+
+  protected void ExpandBuff(boolean wrapAround)
+  {
+    char[] newbuffer = new char[bufsize + 2048];
+    int newbufline[] = new int[bufsize + 2048];
+    int newbufcolumn[] = new int[bufsize + 2048];
+
+    try
+    {
+      if (wrapAround)
+      {
+        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+        System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
+        buffer = newbuffer;
+
+        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+        System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
+        bufline = newbufline;
+
+        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+        System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
+        bufcolumn = newbufcolumn;
+
+        maxNextCharInd = (bufpos += (bufsize - tokenBegin));
+      }
+      else
+      {
+        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+        buffer = newbuffer;
+
+        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+        bufline = newbufline;
+
+        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+        bufcolumn = newbufcolumn;
+
+        maxNextCharInd = (bufpos -= tokenBegin);
+      }
+    }
+    catch (Throwable t)
+    {
+      throw new Error(t.getMessage());
+    }
+
+
+    bufsize += 2048;
+    available = bufsize;
+    tokenBegin = 0;
+  }
+
+  protected void FillBuff() throws java.io.IOException
+  {
+    if (maxNextCharInd == available)
+    {
+      if (available == bufsize)
+      {
+        if (tokenBegin > 2048)
+        {
+          bufpos = maxNextCharInd = 0;
+          available = tokenBegin;
+        }
+        else if (tokenBegin < 0)
+          bufpos = maxNextCharInd = 0;
+        else
+          ExpandBuff(false);
+      }
+      else if (available > tokenBegin)
+        available = bufsize;
+      else if ((tokenBegin - available) < 2048)
+        ExpandBuff(true);
+      else
+        available = tokenBegin;
+    }
+
+    int i;
+    try {
+      if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)
+      {
+        inputStream.close();
+        throw new java.io.IOException();
+      }
+      else
+        maxNextCharInd += i;
+      return;
+    }
+    catch(java.io.IOException e) {
+      --bufpos;
+      backup(0);
+      if (tokenBegin == -1)
+        tokenBegin = bufpos;
+      throw e;
+    }
+  }
+
+/** Start. */
+  public char BeginToken() throws java.io.IOException
+  {
+    tokenBegin = -1;
+    char c = readChar();
+    tokenBegin = bufpos;
+
+    return c;
+  }
+
+  protected void UpdateLineColumn(char c)
+  {
+    column++;
+
+    if (prevCharIsLF)
+    {
+      prevCharIsLF = false;
+      line += (column = 1);
+    }
+    else if (prevCharIsCR)
+    {
+      prevCharIsCR = false;
+      if (c == '\n')
+      {
+        prevCharIsLF = true;
+      }
+      else
+        line += (column = 1);
+    }
+
+    switch (c)
+    {
+      case '\r' :
+        prevCharIsCR = true;
+        break;
+      case '\n' :
+        prevCharIsLF = true;
+        break;
+      case '\t' :
+        column--;
+        column += (tabSize - (column % tabSize));
+        break;
+      default :
+        break;
+    }
+
+    bufline[bufpos] = line;
+    bufcolumn[bufpos] = column;
+  }
+
+/** Read a character. */
+  public char readChar() throws java.io.IOException
+  {
+    if (inBuf > 0)
+    {
+      --inBuf;
+
+      if (++bufpos == bufsize)
+        bufpos = 0;
+
+      return buffer[bufpos];
+    }
+
+    if (++bufpos >= maxNextCharInd)
+      FillBuff();
+
+    char c = buffer[bufpos];
+
+    UpdateLineColumn(c);
+    return c;
+  }
+
+  @Deprecated
+  /**
+   * @deprecated
+   * @see #getEndColumn
+   */
+
+  public int getColumn() {
+    return bufcolumn[bufpos];
+  }
+
+  @Deprecated
+  /**
+   * @deprecated
+   * @see #getEndLine
+   */
+
+  public int getLine() {
+    return bufline[bufpos];
+  }
+
+  /** Get token end column number. */
+  public int getEndColumn() {
+    return bufcolumn[bufpos];
+  }
+
+  /** Get token end line number. */
+  public int getEndLine() {
+     return bufline[bufpos];
+  }
+
+  /** Get token beginning column number. */
+  public int getBeginColumn() {
+    return bufcolumn[tokenBegin];
+  }
+
+  /** Get token beginning line number. */
+  public int getBeginLine() {
+    return bufline[tokenBegin];
+  }
+
+/** Backup a number of characters. */
+  public void backup(int amount) {
+
+    inBuf += amount;
+    if ((bufpos -= amount) < 0)
+      bufpos += bufsize;
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    available = bufsize = buffersize;
+    buffer = new char[buffersize];
+    bufline = new int[buffersize];
+    bufcolumn = new int[buffersize];
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+                          int startcolumn)
+  {
+    this(dstream, startline, startcolumn, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.Reader dstream)
+  {
+    this(dstream, 1, 1, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    if (buffer == null || buffersize != buffer.length)
+    {
+      available = bufsize = buffersize;
+      buffer = new char[buffersize];
+      bufline = new int[buffersize];
+      bufcolumn = new int[buffersize];
+    }
+    prevCharIsLF = prevCharIsCR = false;
+    tokenBegin = inBuf = maxNextCharInd = 0;
+    bufpos = -1;
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader dstream, int startline,
+                     int startcolumn)
+  {
+    ReInit(dstream, startline, startcolumn, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader dstream)
+  {
+    ReInit(dstream, 1, 1, 4096);
+  }
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
+  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+    this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
+                          int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+    this(dstream, encoding, startline, startcolumn, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+                          int startcolumn)
+  {
+    this(dstream, startline, startcolumn, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+    this(dstream, encoding, 1, 1, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream)
+  {
+    this(dstream, 1, 1, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+    ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, int startline,
+                          int startcolumn, int buffersize)
+  {
+    ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+    ReInit(dstream, encoding, 1, 1, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream)
+  {
+    ReInit(dstream, 1, 1, 4096);
+  }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                     int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+    ReInit(dstream, encoding, startline, startcolumn, 4096);
+  }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, int startline,
+                     int startcolumn)
+  {
+    ReInit(dstream, startline, startcolumn, 4096);
+  }
+  /** Get token literal value. */
+  public String GetImage()
+  {
+    if (bufpos >= tokenBegin)
+      return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
+    else
+      return new String(buffer, tokenBegin, bufsize - tokenBegin) +
+                            new String(buffer, 0, bufpos + 1);
+  }
+
+  /** Get the suffix. */
+  public char[] GetSuffix(int len)
+  {
+    char[] ret = new char[len];
+
+    if ((bufpos + 1) >= len)
+      System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
+    else
+    {
+      System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
+                                                        len - bufpos - 1);
+      System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
+    }
+
+    return ret;
+  }
+
+  /** Reset buffer when finished. */
+  public void Done()
+  {
+    buffer = null;
+    bufline = null;
+    bufcolumn = null;
+  }
+
+  /**
+   * Method to adjust line and column numbers for the start of a token.
+   */
+  public void adjustBeginLineColumn(int newLine, int newCol)
+  {
+    int start = tokenBegin;
+    int len;
+
+    if (bufpos >= tokenBegin)
+    {
+      len = bufpos - tokenBegin + inBuf + 1;
+    }
+    else
+    {
+      len = bufsize - tokenBegin + bufpos + 1 + inBuf;
+    }
+
+    int i = 0, j = 0, k = 0;
+    int nextColDiff = 0, columnDiff = 0;
+
+    while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
+    {
+      bufline[j] = newLine;
+      nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
+      bufcolumn[j] = newCol + columnDiff;
+      columnDiff = nextColDiff;
+      i++;
+    }
+
+    if (i < len)
+    {
+      bufline[j] = newLine++;
+      bufcolumn[j] = newCol + columnDiff;
+
+      while (i++ < len)
+      {
+        if (bufline[j = start % bufsize] != bufline[++start % bufsize])
+          bufline[j] = newLine++;
+        else
+          bufline[j] = newLine;
+      }
+    }
+
+    line = bufline[j];
+    column = bufcolumn[j];
+  }
+
+}
+/* JavaCC - OriginalChecksum=b0bce35239226f00f9dd0fa14ab3ad17 (do not edit this line) */
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/Token.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/Token.java
new file mode 100644 (file)
index 0000000..468572c
--- /dev/null
@@ -0,0 +1,130 @@
+package org.gnunet.seaspider.parser;
+/* Generated By:JavaCC: Do not edit this line. Token.java Version 5.0 */
+/* JavaCCOptions:TOKEN_EXTENDS=,KEEP_LINE_COL=null,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
+/**
+ * Describes the input token stream.
+ */
+
+public class Token implements java.io.Serializable {
+
+  /**
+   * The version identifier for this Serializable class.
+   * Increment only if the <i>serialized</i> form of the
+   * class changes.
+   */
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * An integer that describes the kind of this token.  This numbering
+   * system is determined by JavaCCParser, and a table of these numbers is
+   * stored in the file ...Constants.java.
+   */
+  public int kind;
+
+  /** The line number of the first character of this Token. */
+  public int beginLine;
+  /** The column number of the first character of this Token. */
+  public int beginColumn;
+  /** The line number of the last character of this Token. */
+  public int endLine;
+  /** The column number of the last character of this Token. */
+  public int endColumn;
+
+  /**
+   * The string image of the token.
+   */
+  public String image;
+
+  /**
+   * A reference to the next regular (non-special) token from the input
+   * stream.  If this is the last token from the input stream, or if the
+   * token manager has not read tokens beyond this one, this field is
+   * set to null.  This is true only if this token is also a regular
+   * token.  Otherwise, see below for a description of the contents of
+   * this field.
+   */
+  public Token next;
+
+  /**
+   * This field is used to access special tokens that occur prior to this
+   * token, but after the immediately preceding regular (non-special) token.
+   * If there are no such special tokens, this field is set to null.
+   * When there are more than one such special token, this field refers
+   * to the last of these special tokens, which in turn refers to the next
+   * previous special token through its specialToken field, and so on
+   * until the first special token (whose specialToken field is null).
+   * The next fields of special tokens refer to other special tokens that
+   * immediately follow it (without an intervening regular token).  If there
+   * is no such token, this field is null.
+   */
+  public Token specialToken;
+
+  /**
+   * An optional attribute value of the Token.
+   * Tokens which are not used as syntactic sugar will often contain
+   * meaningful values that will be used later on by the compiler or
+   * interpreter. This attribute value is often different from the image.
+   * Any subclass of Token that actually wants to return a non-null value can
+   * override this method as appropriate.
+   */
+  public Object getValue() {
+    return null;
+  }
+
+  /**
+   * No-argument constructor
+   */
+  public Token() {}
+
+  /**
+   * Constructs a new token for the specified Image.
+   */
+  public Token(int kind)
+  {
+    this(kind, null);
+  }
+
+  /**
+   * Constructs a new token for the specified Image and Kind.
+   */
+  public Token(int kind, String image)
+  {
+    this.kind = kind;
+    this.image = image;
+  }
+
+  /**
+   * Returns the image.
+   */
+  public String toString()
+  {
+    return image;
+  }
+
+  /**
+   * Returns a new Token object, by default. However, if you want, you
+   * can create and return subclass objects based on the value of ofKind.
+   * Simply add the cases to the switch for all those special cases.
+   * For example, if you have a subclass of Token called IDToken that
+   * you want to create if ofKind is ID, simply add something like :
+   *
+   *    case MyParserConstants.ID : return new IDToken(ofKind, image);
+   *
+   * to the following switch statement. Then you can cast matchedToken
+   * variable to the appropriate type and use sit in your lexical actions.
+   */
+  public static Token newToken(int ofKind, String image)
+  {
+    switch(ofKind)
+    {
+      default : return new Token(ofKind, image);
+    }
+  }
+
+  public static Token newToken(int ofKind)
+  {
+    return newToken(ofKind, null);
+  }
+
+}
+/* JavaCC - OriginalChecksum=6145f5d5b504ccb4f95e09f2ce3e748a (do not edit this line) */
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/TokenMgrError.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/TokenMgrError.java
new file mode 100644 (file)
index 0000000..3e46dcf
--- /dev/null
@@ -0,0 +1,146 @@
+package org.gnunet.seaspider.parser;
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 5.0 */
+/* JavaCCOptions: */
+/** Token Manager Error. */
+public class TokenMgrError extends Error
+{
+
+  /**
+   * The version identifier for this Serializable class.
+   * Increment only if the <i>serialized</i> form of the
+   * class changes.
+   */
+  private static final long serialVersionUID = 1L;
+
+  /*
+   * Ordinals for various reasons why an Error of this type can be thrown.
+   */
+
+  /**
+   * Lexical error occurred.
+   */
+  static final int LEXICAL_ERROR = 0;
+
+  /**
+   * An attempt was made to create a second instance of a static token manager.
+   */
+  static final int STATIC_LEXER_ERROR = 1;
+
+  /**
+   * Tried to change to an invalid lexical state.
+   */
+  static final int INVALID_LEXICAL_STATE = 2;
+
+  /**
+   * Detected (and bailed out of) an infinite loop in the token manager.
+   */
+  static final int LOOP_DETECTED = 3;
+
+  /**
+   * Indicates the reason why the exception is thrown. It will have
+   * one of the above 4 values.
+   */
+  int errorCode;
+
+  /**
+   * Replaces unprintable characters by their escaped (or unicode escaped)
+   * equivalents in the given string
+   */
+  protected static final String addEscapes(String str) {
+    StringBuffer retval = new StringBuffer();
+    char ch;
+    for (int i = 0; i < str.length(); i++) {
+      switch (str.charAt(i))
+      {
+        case 0 :
+          continue;
+        case '\b':
+          retval.append("\\b");
+          continue;
+        case '\t':
+          retval.append("\\t");
+          continue;
+        case '\n':
+          retval.append("\\n");
+          continue;
+        case '\f':
+          retval.append("\\f");
+          continue;
+        case '\r':
+          retval.append("\\r");
+          continue;
+        case '\"':
+          retval.append("\\\"");
+          continue;
+        case '\'':
+          retval.append("\\\'");
+          continue;
+        case '\\':
+          retval.append("\\\\");
+          continue;
+        default:
+          if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+            String s = "0000" + Integer.toString(ch, 16);
+            retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+          } else {
+            retval.append(ch);
+          }
+          continue;
+      }
+    }
+    return retval.toString();
+  }
+
+  /**
+   * Returns a detailed message for the Error when it is thrown by the
+   * token manager to indicate a lexical error.
+   * Parameters :
+   *    EOFSeen     : indicates if EOF caused the lexical error
+   *    curLexState : lexical state in which this error occurred
+   *    errorLine   : line number when the error occurred
+   *    errorColumn : column number when the error occurred
+   *    errorAfter  : prefix that was seen before this error occurred
+   *    curchar     : the offending character
+   * Note: You can customize the lexical error message by modifying this method.
+   */
+  protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
+    return("Lexical error at line " +
+          errorLine + ", column " +
+          errorColumn + ".  Encountered: " +
+          (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
+          "after : \"" + addEscapes(errorAfter) + "\"");
+  }
+
+  /**
+   * You can also modify the body of this method to customize your error messages.
+   * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
+   * of end-users concern, so you can return something like :
+   *
+   *     "Internal Error : Please file a bug report .... "
+   *
+   * from this method for such cases in the release version of your parser.
+   */
+  public String getMessage() {
+    return super.getMessage();
+  }
+
+  /*
+   * Constructors of various flavors follow.
+   */
+
+  /** No arg constructor. */
+  public TokenMgrError() {
+  }
+
+  /** Constructor with message and reason. */
+  public TokenMgrError(String message, int reason) {
+    super(message);
+    errorCode = reason;
+  }
+
+  /** Full Constructor. */
+  public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
+    this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
+  }
+}
+/* JavaCC - OriginalChecksum=3f827858bf5c87e5502cccca67d9b325 (do not edit this line) */
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ANDExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ANDExpression.java
new file mode 100644 (file)
index 0000000..8ced2c1
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> EqualityExpression()
+ * f1 -> [ "&" ANDExpression() ]
+ * </PRE>
+ */
+public class ANDExpression implements Node {
+   public EqualityExpression f0;
+   public NodeOptional f1;
+
+   public ANDExpression(EqualityExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AdditiveExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AdditiveExpression.java
new file mode 100644 (file)
index 0000000..f0c2f33
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> MultiplicativeExpression()
+ * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+ * </PRE>
+ */
+public class AdditiveExpression implements Node {
+   public MultiplicativeExpression f0;
+   public NodeOptional f1;
+
+   public AdditiveExpression(MultiplicativeExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ArgumentExpressionList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ArgumentExpressionList.java
new file mode 100644 (file)
index 0000000..0d93ab6
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> AssignmentOrTypeExpression()
+ * f1 -> ( "," AssignmentOrTypeExpression() )*
+ * </PRE>
+ */
+public class ArgumentExpressionList implements Node {
+   public AssignmentOrTypeExpression f0;
+   public NodeListOptional f1;
+
+   public ArgumentExpressionList(AssignmentOrTypeExpression n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Array.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Array.java
new file mode 100644 (file)
index 0000000..2d2798d
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> "["
+ * f1 -> [ ConstantExpression() ]
+ * f2 -> "]"
+ * </PRE>
+ */
+public class Array implements Node {
+   public NodeToken f0;
+   public NodeOptional f1;
+   public NodeToken f2;
+
+   public Array(NodeToken n0, NodeOptional n1, NodeToken n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public Array(NodeOptional n0) {
+      f0 = new NodeToken("[");
+      f1 = n0;
+      f2 = new NodeToken("]");
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentExpression.java
new file mode 100644 (file)
index 0000000..1dc2606
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+ *       | ConditionalExpression()
+ * </PRE>
+ */
+public class AssignmentExpression implements Node {
+   public NodeChoice f0;
+
+   public AssignmentExpression(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentOperator.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentOperator.java
new file mode 100644 (file)
index 0000000..76b5bfb
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+ * </PRE>
+ */
+public class AssignmentOperator implements Node {
+   public NodeChoice f0;
+
+   public AssignmentOperator(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentOrTypeExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/AssignmentOrTypeExpression.java
new file mode 100644 (file)
index 0000000..2d118d2
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> NoIdentifierTypeSpecifier()
+ *       | AssignmentExpression()
+ * </PRE>
+ */
+public class AssignmentOrTypeExpression implements Node {
+   public NodeChoice f0;
+
+   public AssignmentOrTypeExpression(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/CastExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/CastExpression.java
new file mode 100644 (file)
index 0000000..8a420c5
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+ * </PRE>
+ */
+public class CastExpression implements Node {
+   public NodeChoice f0;
+
+   public CastExpression(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/CompoundStatement.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/CompoundStatement.java
new file mode 100644 (file)
index 0000000..18e7e6d
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> "{"
+ * f1 -> ( LocalVariableDeclaration() | Statement() )*
+ * f2 -> "}"
+ * </PRE>
+ */
+public class CompoundStatement implements Node {
+   public NodeToken f0;
+   public NodeListOptional f1;
+   public NodeToken f2;
+
+   public CompoundStatement(NodeToken n0, NodeListOptional n1, NodeToken n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public CompoundStatement(NodeListOptional n0) {
+      f0 = new NodeToken("{");
+      f1 = n0;
+      f2 = new NodeToken("}");
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ConditionalExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ConditionalExpression.java
new file mode 100644 (file)
index 0000000..404ec90
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> LogicalORExpression()
+ * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+ * </PRE>
+ */
+public class ConditionalExpression implements Node {
+   public LogicalORExpression f0;
+   public NodeOptional f1;
+
+   public ConditionalExpression(LogicalORExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Constant.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Constant.java
new file mode 100644 (file)
index 0000000..6ccd64a
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> &lt;INTEGER_LITERAL&gt;
+ *       | &lt;FLOATING_POINT_LITERAL&gt;
+ *       | &lt;CHARACTER_LITERAL&gt;
+ *       | &lt;STRING_LITERAL&gt;
+ * </PRE>
+ */
+public class Constant implements Node {
+   public NodeChoice f0;
+
+   public Constant(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ConstantExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ConstantExpression.java
new file mode 100644 (file)
index 0000000..e1024c4
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ConditionalExpression()
+ * </PRE>
+ */
+public class ConstantExpression implements Node {
+   public ConditionalExpression f0;
+
+   public ConstantExpression(ConditionalExpression n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/DataType.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/DataType.java
new file mode 100644 (file)
index 0000000..e99a46a
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> StructOrUnionSpecifier()
+ * f1 -> &lt;IDENTIFIER&gt;
+ * </PRE>
+ */
+public class DataType implements Node {
+   public StructOrUnionSpecifier f0;
+   public NodeToken f1;
+
+   public DataType(StructOrUnionSpecifier n0, NodeToken n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EnumSpecifier.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EnumSpecifier.java
new file mode 100644 (file)
index 0000000..5bb08fa
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> &lt;ENUM&gt;
+ * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+ * </PRE>
+ */
+public class EnumSpecifier implements Node {
+   public NodeToken f0;
+   public NodeChoice f1;
+
+   public EnumSpecifier(NodeToken n0, NodeChoice n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public EnumSpecifier(NodeChoice n0) {
+      f0 = new NodeToken("enum");
+      f1 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Enumerator.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Enumerator.java
new file mode 100644 (file)
index 0000000..305cf69
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> &lt;IDENTIFIER&gt;
+ * f1 -> [ "=" ConstantExpression() ]
+ * </PRE>
+ */
+public class Enumerator implements Node {
+   public NodeToken f0;
+   public NodeOptional f1;
+
+   public Enumerator(NodeToken n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EnumeratorList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EnumeratorList.java
new file mode 100644 (file)
index 0000000..ba72c06
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> Enumerator()
+ * f1 -> ( "," Enumerator() )*
+ * </PRE>
+ */
+public class EnumeratorList implements Node {
+   public Enumerator f0;
+   public NodeListOptional f1;
+
+   public EnumeratorList(Enumerator n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EqualityExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/EqualityExpression.java
new file mode 100644 (file)
index 0000000..44157bb
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> RelationalExpression()
+ * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+ * </PRE>
+ */
+public class EqualityExpression implements Node {
+   public RelationalExpression f0;
+   public NodeOptional f1;
+
+   public EqualityExpression(RelationalExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExclusiveORExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExclusiveORExpression.java
new file mode 100644 (file)
index 0000000..d80f409
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ANDExpression()
+ * f1 -> [ "^" ExclusiveORExpression() ]
+ * </PRE>
+ */
+public class ExclusiveORExpression implements Node {
+   public ANDExpression f0;
+   public NodeOptional f1;
+
+   public ExclusiveORExpression(ANDExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Expression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Expression.java
new file mode 100644 (file)
index 0000000..e8f021a
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> AssignmentExpression()
+ * f1 -> ( "," AssignmentExpression() )*
+ * </PRE>
+ */
+public class Expression implements Node {
+   public AssignmentExpression f0;
+   public NodeListOptional f1;
+
+   public Expression(AssignmentExpression n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExpressionStatement.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExpressionStatement.java
new file mode 100644 (file)
index 0000000..d6f2382
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> [ Expression() ]
+ * f1 -> ";"
+ * </PRE>
+ */
+public class ExpressionStatement implements Node {
+   public NodeOptional f0;
+   public NodeToken f1;
+
+   public ExpressionStatement(NodeOptional n0, NodeToken n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public ExpressionStatement(NodeOptional n0) {
+      f0 = n0;
+      f1 = new NodeToken(";");
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExternalDeclaration.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ExternalDeclaration.java
new file mode 100644 (file)
index 0000000..9d35928
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( StorageClassSpecifier() )*
+ * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+ * </PRE>
+ */
+public class ExternalDeclaration implements Node {
+   public NodeListOptional f0;
+   public NodeChoice f1;
+
+   public ExternalDeclaration(NodeListOptional n0, NodeChoice n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/FunctionDeclaration.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/FunctionDeclaration.java
new file mode 100644 (file)
index 0000000..54da9f7
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> TypeSpecifier()
+ * f1 -> &lt;IDENTIFIER&gt;
+ * f2 -> "("
+ * f3 -> [ ParameterList() ]
+ * f4 -> ")"
+ * f5 -> ( ";" | CompoundStatement() )
+ * </PRE>
+ */
+public class FunctionDeclaration implements Node {
+   public TypeSpecifier f0;
+   public NodeToken f1;
+   public NodeToken f2;
+   public NodeOptional f3;
+   public NodeToken f4;
+   public NodeChoice f5;
+
+   public FunctionDeclaration(TypeSpecifier n0, NodeToken n1, NodeToken n2, NodeOptional n3, NodeToken n4, NodeChoice n5) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+      f4 = n4;
+      f5 = n5;
+   }
+
+   public FunctionDeclaration(TypeSpecifier n0, NodeToken n1, NodeOptional n2, NodeChoice n3) {
+      f0 = n0;
+      f1 = n1;
+      f2 = new NodeToken("(");
+      f3 = n2;
+      f4 = new NodeToken(")");
+      f5 = n3;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/FunctionType.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/FunctionType.java
new file mode 100644 (file)
index 0000000..263e73e
--- /dev/null
@@ -0,0 +1,65 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> TypeSpecifier()
+ * f1 -> "("
+ * f2 -> "*"
+ * f3 -> &lt;IDENTIFIER&gt;
+ * f4 -> ")"
+ * f5 -> "("
+ * f6 -> [ ParameterList() ]
+ * f7 -> ")"
+ * </PRE>
+ */
+public class FunctionType implements Node {
+   public TypeSpecifier f0;
+   public NodeToken f1;
+   public NodeToken f2;
+   public NodeToken f3;
+   public NodeToken f4;
+   public NodeToken f5;
+   public NodeOptional f6;
+   public NodeToken f7;
+
+   public FunctionType(TypeSpecifier n0, NodeToken n1, NodeToken n2, NodeToken n3, NodeToken n4, NodeToken n5, NodeOptional n6, NodeToken n7) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+      f4 = n4;
+      f5 = n5;
+      f6 = n6;
+      f7 = n7;
+   }
+
+   public FunctionType(TypeSpecifier n0, NodeToken n1, NodeOptional n2) {
+      f0 = n0;
+      f1 = new NodeToken("(");
+      f2 = new NodeToken("*");
+      f3 = n1;
+      f4 = new NodeToken(")");
+      f5 = new NodeToken("(");
+      f6 = n2;
+      f7 = new NodeToken(")");
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/IdentifierList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/IdentifierList.java
new file mode 100644 (file)
index 0000000..7df6de8
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> &lt;IDENTIFIER&gt;
+ * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+ * </PRE>
+ */
+public class IdentifierList implements Node {
+   public NodeToken f0;
+   public NodeListOptional f1;
+
+   public IdentifierList(NodeToken n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InclusiveORExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InclusiveORExpression.java
new file mode 100644 (file)
index 0000000..9d97237
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ExclusiveORExpression()
+ * f1 -> [ "|" InclusiveORExpression() ]
+ * </PRE>
+ */
+public class InclusiveORExpression implements Node {
+   public ExclusiveORExpression f0;
+   public NodeOptional f1;
+
+   public InclusiveORExpression(ExclusiveORExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitDeclarator.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitDeclarator.java
new file mode 100644 (file)
index 0000000..27cd735
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> &lt;IDENTIFIER&gt;
+ * f1 -> [ Array() ]
+ * f2 -> [ "=" Initializer() ]
+ * </PRE>
+ */
+public class InitDeclarator implements Node {
+   public NodeToken f0;
+   public NodeOptional f1;
+   public NodeOptional f2;
+
+   public InitDeclarator(NodeToken n0, NodeOptional n1, NodeOptional n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitDeclaratorList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitDeclaratorList.java
new file mode 100644 (file)
index 0000000..0323a18
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> InitDeclarator()
+ * f1 -> ( "," InitDeclarator() )*
+ * </PRE>
+ */
+public class InitDeclaratorList implements Node {
+   public InitDeclarator f0;
+   public NodeListOptional f1;
+
+   public InitDeclaratorList(InitDeclarator n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Initializer.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Initializer.java
new file mode 100644 (file)
index 0000000..e7e03b9
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+ * </PRE>
+ */
+public class Initializer implements Node {
+   public NodeChoice f0;
+
+   public Initializer(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitializerList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/InitializerList.java
new file mode 100644 (file)
index 0000000..9216025
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> Initializer()
+ * f1 -> ( "," Initializer() )*
+ * </PRE>
+ */
+public class InitializerList implements Node {
+   public Initializer f0;
+   public NodeListOptional f1;
+
+   public InitializerList(Initializer n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/IterationStatement.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/IterationStatement.java
new file mode 100644 (file)
index 0000000..c9ba919
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+ * </PRE>
+ */
+public class IterationStatement implements Node {
+   public NodeChoice f0;
+
+   public IterationStatement(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/JumpStatement.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/JumpStatement.java
new file mode 100644 (file)
index 0000000..7341aad
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+ * </PRE>
+ */
+public class JumpStatement implements Node {
+   public NodeChoice f0;
+
+   public JumpStatement(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LabeledStatement.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LabeledStatement.java
new file mode 100644 (file)
index 0000000..5f4ef4f
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+ * </PRE>
+ */
+public class LabeledStatement implements Node {
+   public NodeChoice f0;
+
+   public LabeledStatement(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LocalVariableDeclaration.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LocalVariableDeclaration.java
new file mode 100644 (file)
index 0000000..8337772
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> [ &lt;STATIC&gt; ]
+ * f1 -> VariableDeclaration()
+ * </PRE>
+ */
+public class LocalVariableDeclaration implements Node {
+   public NodeOptional f0;
+   public VariableDeclaration f1;
+
+   public LocalVariableDeclaration(NodeOptional n0, VariableDeclaration n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LogicalANDExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LogicalANDExpression.java
new file mode 100644 (file)
index 0000000..b353bb7
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> InclusiveORExpression()
+ * f1 -> [ "&&" LogicalANDExpression() ]
+ * </PRE>
+ */
+public class LogicalANDExpression implements Node {
+   public InclusiveORExpression f0;
+   public NodeOptional f1;
+
+   public LogicalANDExpression(InclusiveORExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LogicalORExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/LogicalORExpression.java
new file mode 100644 (file)
index 0000000..87f8d0d
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> LogicalANDExpression()
+ * f1 -> [ "||" LogicalORExpression() ]
+ * </PRE>
+ */
+public class LogicalORExpression implements Node {
+   public LogicalANDExpression f0;
+   public NodeOptional f1;
+
+   public LogicalORExpression(LogicalANDExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/MultiplicativeExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/MultiplicativeExpression.java
new file mode 100644 (file)
index 0000000..9b801d1
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> CastExpression()
+ * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+ * </PRE>
+ */
+public class MultiplicativeExpression implements Node {
+   public CastExpression f0;
+   public NodeOptional f1;
+
+   public MultiplicativeExpression(CastExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NoIdentifierTypeSpecifier.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NoIdentifierTypeSpecifier.java
new file mode 100644 (file)
index 0000000..ff4fc41
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> [ &lt;CONST&gt; ]
+ * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+ * f2 -> [ Pointer() ]
+ * f3 -> [ Array() ]
+ * </PRE>
+ */
+public class NoIdentifierTypeSpecifier implements Node {
+   public NodeOptional f0;
+   public NodeChoice f1;
+   public NodeOptional f2;
+   public NodeOptional f3;
+
+   public NoIdentifierTypeSpecifier(NodeOptional n0, NodeChoice n1, NodeOptional n2, NodeOptional n3) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Node.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Node.java
new file mode 100644 (file)
index 0000000..4ea3904
--- /dev/null
@@ -0,0 +1,16 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * The interface which all syntax tree classes must implement.
+ */
+public interface Node extends java.io.Serializable {
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v);
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu);
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v);
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu);
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeChoice.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeChoice.java
new file mode 100644 (file)
index 0000000..ff9a66d
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Represents a grammar choice, e.g. ( A | B )
+ */
+public class NodeChoice implements Node {
+   public NodeChoice(Node node) {
+      this(node, -1);
+   }
+
+   public NodeChoice(Node node, int whichChoice) {
+      choice = node;
+      which = whichChoice;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      choice.accept(v);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return choice.accept(v,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return choice.accept(v);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      choice.accept(v,argu);
+   }
+
+   public Node choice;
+   public int which;
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeList.java
new file mode 100644 (file)
index 0000000..36352b0
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+import java.util.*;
+
+/**
+ * Represents a grammar list, e.g. ( A )+
+ */
+public class NodeList implements NodeListInterface {
+   public NodeList() {
+      nodes = new Vector<Node>();
+   }
+
+   public NodeList(Node firstNode) {
+      nodes = new Vector<Node>();
+      addNode(firstNode);
+   }
+
+   public void addNode(Node n) {
+      nodes.addElement(n);
+   }
+
+   public Enumeration<Node> elements() { return nodes.elements(); }
+   public Node elementAt(int i)  { return nodes.elementAt(i); }
+   public int size()             { return nodes.size(); }
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public Vector<Node> nodes;
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeListInterface.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeListInterface.java
new file mode 100644 (file)
index 0000000..5b37ab5
--- /dev/null
@@ -0,0 +1,22 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * The interface which NodeList, NodeListOptional, and NodeSequence
+ * implement.
+ */
+public interface NodeListInterface extends Node {
+   public void addNode(Node n);
+   public Node elementAt(int i);
+   public java.util.Enumeration<Node> elements();
+   public int size();
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v);
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu);
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v);
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu);
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeListOptional.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeListOptional.java
new file mode 100644 (file)
index 0000000..73ca45f
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+import java.util.*;
+
+/**
+ * Represents an optional grammar list, e.g. ( A )*
+ */
+public class NodeListOptional implements NodeListInterface {
+   public NodeListOptional() {
+      nodes = new Vector<Node>();
+   }
+
+   public NodeListOptional(Node firstNode) {
+      nodes = new Vector<Node>();
+      addNode(firstNode);
+   }
+
+   public void addNode(Node n) {
+      nodes.addElement(n);
+   }
+
+   public Enumeration<Node> elements() { return nodes.elements(); }
+   public Node elementAt(int i)  { return nodes.elementAt(i); }
+   public int size()             { return nodes.size(); }
+   public boolean present()      { return nodes.size() != 0; }
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public Vector<Node> nodes;
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeOptional.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeOptional.java
new file mode 100644 (file)
index 0000000..364c7c6
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Represents an grammar optional node, e.g. ( A )? or [ A ]
+ */
+public class NodeOptional implements Node {
+   public NodeOptional() {
+      node = null;
+   }
+
+   public NodeOptional(Node n) {
+      addNode(n);
+   }
+
+   public void addNode(Node n)  {
+      if ( node != null)                // Oh oh!
+         throw new Error("Attempt to set optional node twice");
+
+      node = n;
+   }
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+   public boolean present()   { return node != null; }
+
+   public Node node;
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeSequence.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeSequence.java
new file mode 100644 (file)
index 0000000..63c0978
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+import java.util.*;
+
+/**
+ * Represents a sequence of nodes nested within a choice, list,
+ * optional list, or optional, e.g. ( A B )+ or [ C D E ]
+ */
+public class NodeSequence implements NodeListInterface {
+   public NodeSequence(int n) {
+      nodes = new Vector<Node>(n);
+   }
+
+   public NodeSequence(Node firstNode) {
+      nodes = new Vector<Node>();
+      addNode(firstNode);
+   }
+
+   public void addNode(Node n) {
+      nodes.addElement(n);
+   }
+
+   public Node elementAt(int i)  { return nodes.elementAt(i); }
+   public Enumeration<Node> elements() { return nodes.elements(); }
+   public int size()             { return nodes.size(); }
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public Vector<Node> nodes;
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeToken.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/NodeToken.java
new file mode 100644 (file)
index 0000000..90db44d
--- /dev/null
@@ -0,0 +1,87 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+import java.util.*;
+/**
+ * Represents a single token in the grammar.  If the "-tk" option
+ * is used, also contains a Vector of preceding special tokens.
+ */
+public class NodeToken implements Node {
+   public NodeToken(String s) {
+      this(s, -1, -1, -1, -1, -1);    }
+
+   public NodeToken(String s, int kind, int beginLine, int beginColumn, int endLine, int endColumn) {
+      tokenImage = s;
+      specialTokens = null;
+      this.kind = kind;
+      this.beginLine = beginLine;
+      this.beginColumn = beginColumn;
+      this.endLine = endLine;
+      this.endColumn = endColumn;
+   }
+
+   public NodeToken getSpecialAt(int i) {
+      if ( specialTokens == null )
+         throw new java.util.NoSuchElementException("No specials in token");
+      return specialTokens.elementAt(i);
+   }
+
+   public int numSpecials() {
+      if ( specialTokens == null ) return 0;
+      return specialTokens.size();
+   }
+
+   public void addSpecial(NodeToken s) {
+      if ( specialTokens == null ) specialTokens = new Vector<NodeToken>();
+      specialTokens.addElement(s);
+   }
+
+   public void trimSpecials() {
+      if ( specialTokens == null ) return;
+      specialTokens.trimToSize();
+   }
+
+   public String toString()     { return tokenImage; }
+
+   public String withSpecials() {
+      if ( specialTokens == null )
+          return tokenImage;
+
+       StringBuffer buf = new StringBuffer();
+
+       for ( Enumeration<NodeToken> e = specialTokens.elements(); e.hasMoreElements(); )
+          buf.append(e.nextElement().toString());
+
+       buf.append(tokenImage);
+       return buf.toString();
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public String tokenImage;
+
+   // Stores a list of NodeTokens
+   public Vector<NodeToken> specialTokens;
+
+   // -1 for these ints means no position info is available.
+   public int beginLine, beginColumn, endLine, endColumn;
+
+   // Equal to the JavaCC token "kind" integer.
+   // -1 if not available.
+   public int kind;
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ParameterDeclaration.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ParameterDeclaration.java
new file mode 100644 (file)
index 0000000..da7a71d
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> TypeSpecifier()
+ * f1 -> &lt;IDENTIFIER&gt;
+ * f2 -> [ Array() ]
+ * </PRE>
+ */
+public class ParameterDeclaration implements Node {
+   public TypeSpecifier f0;
+   public NodeToken f1;
+   public NodeOptional f2;
+
+   public ParameterDeclaration(TypeSpecifier n0, NodeToken n1, NodeOptional n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ParameterList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ParameterList.java
new file mode 100644 (file)
index 0000000..d92fd41
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ParameterDeclaration()
+ * f1 -> ( "," ParameterDeclaration() )*
+ * f2 -> [ "," "..." ]
+ * </PRE>
+ */
+public class ParameterList implements Node {
+   public ParameterDeclaration f0;
+   public NodeListOptional f1;
+   public NodeOptional f2;
+
+   public ParameterList(ParameterDeclaration n0, NodeListOptional n1, NodeOptional n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Pointer.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Pointer.java
new file mode 100644 (file)
index 0000000..56f175e
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> "*"
+ * f1 -> [ &lt;CONST&gt; ]
+ * f2 -> [ Pointer() ]
+ * </PRE>
+ */
+public class Pointer implements Node {
+   public NodeToken f0;
+   public NodeOptional f1;
+   public NodeOptional f2;
+
+   public Pointer(NodeToken n0, NodeOptional n1, NodeOptional n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public Pointer(NodeOptional n0, NodeOptional n1) {
+      f0 = new NodeToken("*");
+      f1 = n0;
+      f2 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/PostfixExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/PostfixExpression.java
new file mode 100644 (file)
index 0000000..52e1415
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> PrimaryExpression()
+ * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+ * </PRE>
+ */
+public class PostfixExpression implements Node {
+   public PrimaryExpression f0;
+   public NodeListOptional f1;
+
+   public PostfixExpression(PrimaryExpression n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/PrimaryExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/PrimaryExpression.java
new file mode 100644 (file)
index 0000000..fb953dc
--- /dev/null
@@ -0,0 +1,35 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> &lt;IDENTIFIER&gt;
+ *       | Constant()
+ *       | "(" Expression() ")"
+ * </PRE>
+ */
+public class PrimaryExpression implements Node {
+   public NodeChoice f0;
+
+   public PrimaryExpression(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/RelationalExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/RelationalExpression.java
new file mode 100644 (file)
index 0000000..5b82307
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ShiftExpression()
+ * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+ * </PRE>
+ */
+public class RelationalExpression implements Node {
+   public ShiftExpression f0;
+   public NodeOptional f1;
+
+   public RelationalExpression(ShiftExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/SelectionStatement.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/SelectionStatement.java
new file mode 100644 (file)
index 0000000..e3da4cf
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+ * </PRE>
+ */
+public class SelectionStatement implements Node {
+   public NodeChoice f0;
+
+   public SelectionStatement(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ShiftExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/ShiftExpression.java
new file mode 100644 (file)
index 0000000..b3c9e5b
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> AdditiveExpression()
+ * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+ * </PRE>
+ */
+public class ShiftExpression implements Node {
+   public AdditiveExpression f0;
+   public NodeOptional f1;
+
+   public ShiftExpression(AdditiveExpression n0, NodeOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Statement.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/Statement.java
new file mode 100644 (file)
index 0000000..27148df
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+ * </PRE>
+ */
+public class Statement implements Node {
+   public NodeChoice f0;
+
+   public Statement(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StorageClassSpecifier.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StorageClassSpecifier.java
new file mode 100644 (file)
index 0000000..223839f
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+ * </PRE>
+ */
+public class StorageClassSpecifier implements Node {
+   public NodeChoice f0;
+
+   public StorageClassSpecifier(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructDeclaration.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructDeclaration.java
new file mode 100644 (file)
index 0000000..074ec42
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> TypeSpecifier()
+ * f1 -> &lt;IDENTIFIER&gt;
+ * f2 -> [ Array() | ":" ConstantExpression() ]
+ * f3 -> [ &lt;IDENTIFIER&gt; ]
+ * f4 -> ";"
+ * </PRE>
+ */
+public class StructDeclaration implements Node {
+   public TypeSpecifier f0;
+   public NodeToken f1;
+   public NodeOptional f2;
+   public NodeOptional f3;
+   public NodeToken f4;
+
+   public StructDeclaration(TypeSpecifier n0, NodeToken n1, NodeOptional n2, NodeOptional n3, NodeToken n4) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+      f4 = n4;
+   }
+
+   public StructDeclaration(TypeSpecifier n0, NodeToken n1, NodeOptional n2, NodeOptional n3) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+      f4 = new NodeToken(";");
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructDeclarationList.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructDeclarationList.java
new file mode 100644 (file)
index 0000000..32d0814
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( StructDeclaration() )+
+ * </PRE>
+ */
+public class StructDeclarationList implements Node {
+   public NodeList f0;
+
+   public StructDeclarationList(NodeList n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructOrUnion.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructOrUnion.java
new file mode 100644 (file)
index 0000000..2131d7a
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+ * </PRE>
+ */
+public class StructOrUnion implements Node {
+   public NodeChoice f0;
+
+   public StructOrUnion(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructOrUnionSpecifier.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/StructOrUnionSpecifier.java
new file mode 100644 (file)
index 0000000..aa64929
--- /dev/null
@@ -0,0 +1,34 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+ *       | StructOrUnion() &lt;IDENTIFIER&gt;
+ * </PRE>
+ */
+public class StructOrUnionSpecifier implements Node {
+   public NodeChoice f0;
+
+   public StructOrUnionSpecifier(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TranslationUnit.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TranslationUnit.java
new file mode 100644 (file)
index 0000000..feb48f6
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( ExternalDeclaration() )+
+ * </PRE>
+ */
+public class TranslationUnit implements Node {
+   public NodeList f0;
+
+   public TranslationUnit(NodeList n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TypeDeclaration.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TypeDeclaration.java
new file mode 100644 (file)
index 0000000..500aeca
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> &lt;TYPEDEF&gt;
+ * f1 -> ( DataType() | FunctionType() )
+ * f2 -> ";"
+ * </PRE>
+ */
+public class TypeDeclaration implements Node {
+   public NodeToken f0;
+   public NodeChoice f1;
+   public NodeToken f2;
+
+   public TypeDeclaration(NodeToken n0, NodeChoice n1, NodeToken n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public TypeDeclaration(NodeChoice n0) {
+      f0 = new NodeToken("typedef");
+      f1 = n0;
+      f2 = new NodeToken(";");
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TypeSpecifier.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/TypeSpecifier.java
new file mode 100644 (file)
index 0000000..6d1607d
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> [ &lt;CONST&gt; ]
+ * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+ * f2 -> [ Pointer() ]
+ * f3 -> [ Array() ]
+ * </PRE>
+ */
+public class TypeSpecifier implements Node {
+   public NodeOptional f0;
+   public NodeChoice f1;
+   public NodeOptional f2;
+   public NodeOptional f3;
+
+   public TypeSpecifier(NodeOptional n0, NodeChoice n1, NodeOptional n2, NodeOptional n3) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/UnaryExpression.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/UnaryExpression.java
new file mode 100644 (file)
index 0000000..1e7894e
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+ * </PRE>
+ */
+public class UnaryExpression implements Node {
+   public NodeChoice f0;
+
+   public UnaryExpression(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/UnaryOperator.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/UnaryOperator.java
new file mode 100644 (file)
index 0000000..630af9d
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+ * </PRE>
+ */
+public class UnaryOperator implements Node {
+   public NodeChoice f0;
+
+   public UnaryOperator(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/VariableClassSpecifier.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/VariableClassSpecifier.java
new file mode 100644 (file)
index 0000000..5a91019
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+ * </PRE>
+ */
+public class VariableClassSpecifier implements Node {
+   public NodeListOptional f0;
+
+   public VariableClassSpecifier(NodeListOptional n0) {
+      f0 = n0;
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/VariableDeclaration.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/nodes/VariableDeclaration.java
new file mode 100644 (file)
index 0000000..aa7cf6e
--- /dev/null
@@ -0,0 +1,49 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.nodes;
+
+/**
+ * Grammar production:
+ * <PRE>
+ * f0 -> VariableClassSpecifier()
+ * f1 -> TypeSpecifier()
+ * f2 -> InitDeclaratorList()
+ * f3 -> ";"
+ * </PRE>
+ */
+public class VariableDeclaration implements Node {
+   public VariableClassSpecifier f0;
+   public TypeSpecifier f1;
+   public InitDeclaratorList f2;
+   public NodeToken f3;
+
+   public VariableDeclaration(VariableClassSpecifier n0, TypeSpecifier n1, InitDeclaratorList n2, NodeToken n3) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+   }
+
+   public VariableDeclaration(VariableClassSpecifier n0, TypeSpecifier n1, InitDeclaratorList n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = new NodeToken(";");
+   }
+
+   public void accept(org.gnunet.seaspider.parser.visitors.Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(org.gnunet.seaspider.parser.visitors.GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(org.gnunet.seaspider.parser.visitors.GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(org.gnunet.seaspider.parser.visitors.GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/DepthFirstVisitor.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/DepthFirstVisitor.java
new file mode 100644 (file)
index 0000000..57c92b7
--- /dev/null
@@ -0,0 +1,701 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class DepthFirstVisitor implements Visitor {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public void visit(NodeList n) {
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
+         e.nextElement().accept(this);
+   }
+
+   public void visit(NodeListOptional n) {
+      if ( n.present() )
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
+            e.nextElement().accept(this);
+   }
+
+   public void visit(NodeOptional n) {
+      if ( n.present() )
+         n.node.accept(this);
+   }
+
+   public void visit(NodeSequence n) {
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
+         e.nextElement().accept(this);
+   }
+
+   public void visit(NodeToken n) { }
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public void visit(TranslationUnit n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public void visit(ExternalDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public void visit(FunctionDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      n.f5.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public void visit(StorageClassSpecifier n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public void visit(TypeDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(DataType n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public void visit(FunctionType n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      n.f5.accept(this);
+      n.f6.accept(this);
+      n.f7.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public void visit(ParameterList n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(ParameterDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public void visit(VariableDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public void visit(LocalVariableDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public void visit(VariableClassSpecifier n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(TypeSpecifier n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(NoIdentifierTypeSpecifier n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(StructOrUnionSpecifier n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public void visit(StructOrUnion n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public void visit(StructDeclarationList n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public void visit(InitDeclaratorList n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public void visit(InitDeclarator n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public void visit(StructDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public void visit(EnumSpecifier n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public void visit(EnumeratorList n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public void visit(Enumerator n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public void visit(Pointer n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public void visit(IdentifierList n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public void visit(Initializer n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public void visit(InitializerList n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public void visit(Array n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public void visit(Statement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public void visit(LabeledStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public void visit(ExpressionStatement n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public void visit(CompoundStatement n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public void visit(SelectionStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public void visit(IterationStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public void visit(JumpStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public void visit(Expression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public void visit(AssignmentOperator n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public void visit(ConditionalExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(ConstantExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalORExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalANDExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(InclusiveORExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(ExclusiveORExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public void visit(ANDExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public void visit(EqualityExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public void visit(RelationalExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public void visit(ShiftExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public void visit(AdditiveExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public void visit(MultiplicativeExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public void visit(CastExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public void visit(UnaryExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public void visit(UnaryOperator n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public void visit(PostfixExpression n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public void visit(PrimaryExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public void visit(ArgumentExpressionList n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentOrTypeExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public void visit(Constant n) {
+      n.f0.accept(this);
+   }
+
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJDepthFirst.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJDepthFirst.java
new file mode 100644 (file)
index 0000000..2ac3fd8
--- /dev/null
@@ -0,0 +1,837 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class GJDepthFirst<R,A> implements GJVisitor<R,A> {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public R visit(NodeList n, A argu) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeListOptional n, A argu) {
+      if ( n.present() ) {
+         R _ret=null;
+         int _count=0;
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+            e.nextElement().accept(this,argu);
+            _count++;
+         }
+         return _ret;
+      }
+      else
+         return null;
+   }
+
+   public R visit(NodeOptional n, A argu) {
+      if ( n.present() )
+         return n.node.accept(this,argu);
+      else
+         return null;
+   }
+
+   public R visit(NodeSequence n, A argu) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeToken n, A argu) { return null; }
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public R visit(TranslationUnit n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public R visit(ExternalDeclaration n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public R visit(FunctionDeclaration n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      n.f5.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public R visit(StorageClassSpecifier n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public R visit(TypeDeclaration n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(DataType n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public R visit(FunctionType n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      n.f5.accept(this, argu);
+      n.f6.accept(this, argu);
+      n.f7.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public R visit(ParameterList n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(ParameterDeclaration n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public R visit(VariableDeclaration n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public R visit(LocalVariableDeclaration n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public R visit(VariableClassSpecifier n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(TypeSpecifier n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(NoIdentifierTypeSpecifier n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(StructOrUnionSpecifier n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public R visit(StructOrUnion n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public R visit(StructDeclarationList n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public R visit(InitDeclaratorList n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public R visit(InitDeclarator n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public R visit(StructDeclaration n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public R visit(EnumSpecifier n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public R visit(EnumeratorList n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public R visit(Enumerator n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public R visit(Pointer n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public R visit(IdentifierList n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public R visit(Initializer n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public R visit(InitializerList n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public R visit(Array n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public R visit(Statement n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public R visit(LabeledStatement n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public R visit(ExpressionStatement n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public R visit(CompoundStatement n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public R visit(SelectionStatement n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public R visit(IterationStatement n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public R visit(JumpStatement n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public R visit(Expression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public R visit(AssignmentOperator n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public R visit(ConditionalExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(ConstantExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalORExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalANDExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(InclusiveORExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(ExclusiveORExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public R visit(ANDExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public R visit(EqualityExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public R visit(RelationalExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public R visit(ShiftExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public R visit(AdditiveExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public R visit(MultiplicativeExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public R visit(CastExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public R visit(UnaryExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public R visit(UnaryOperator n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public R visit(PostfixExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public R visit(PrimaryExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public R visit(ArgumentExpressionList n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentOrTypeExpression n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public R visit(Constant n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJNoArguDepthFirst.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJNoArguDepthFirst.java
new file mode 100644 (file)
index 0000000..fb13e7a
--- /dev/null
@@ -0,0 +1,837 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class GJNoArguDepthFirst<R> implements GJNoArguVisitor<R> {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public R visit(NodeList n) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeListOptional n) {
+      if ( n.present() ) {
+         R _ret=null;
+         int _count=0;
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+            e.nextElement().accept(this);
+            _count++;
+         }
+         return _ret;
+      }
+      else
+         return null;
+   }
+
+   public R visit(NodeOptional n) {
+      if ( n.present() )
+         return n.node.accept(this);
+      else
+         return null;
+   }
+
+   public R visit(NodeSequence n) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeToken n) { return null; }
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public R visit(TranslationUnit n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public R visit(ExternalDeclaration n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public R visit(FunctionDeclaration n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      n.f5.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public R visit(StorageClassSpecifier n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public R visit(TypeDeclaration n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(DataType n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public R visit(FunctionType n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      n.f5.accept(this);
+      n.f6.accept(this);
+      n.f7.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public R visit(ParameterList n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(ParameterDeclaration n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public R visit(VariableDeclaration n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public R visit(LocalVariableDeclaration n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public R visit(VariableClassSpecifier n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(TypeSpecifier n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(NoIdentifierTypeSpecifier n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(StructOrUnionSpecifier n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public R visit(StructOrUnion n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public R visit(StructDeclarationList n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public R visit(InitDeclaratorList n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public R visit(InitDeclarator n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public R visit(StructDeclaration n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public R visit(EnumSpecifier n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public R visit(EnumeratorList n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public R visit(Enumerator n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public R visit(Pointer n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public R visit(IdentifierList n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public R visit(Initializer n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public R visit(InitializerList n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public R visit(Array n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public R visit(Statement n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public R visit(LabeledStatement n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public R visit(ExpressionStatement n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public R visit(CompoundStatement n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public R visit(SelectionStatement n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public R visit(IterationStatement n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public R visit(JumpStatement n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public R visit(Expression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public R visit(AssignmentOperator n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public R visit(ConditionalExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(ConstantExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalORExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalANDExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(InclusiveORExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(ExclusiveORExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public R visit(ANDExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public R visit(EqualityExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public R visit(RelationalExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public R visit(ShiftExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public R visit(AdditiveExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public R visit(MultiplicativeExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public R visit(CastExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public R visit(UnaryExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public R visit(UnaryOperator n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public R visit(PostfixExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public R visit(PrimaryExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public R visit(ArgumentExpressionList n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentOrTypeExpression n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public R visit(Constant n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJNoArguVisitor.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJNoArguVisitor.java
new file mode 100644 (file)
index 0000000..0e32ab2
--- /dev/null
@@ -0,0 +1,508 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * All GJ visitors with no argument must implement this interface.
+ */
+
+public interface GJNoArguVisitor<R> {
+
+   //
+   // GJ Auto class visitors with no argument
+   //
+
+   public R visit(NodeList n);
+   public R visit(NodeListOptional n);
+   public R visit(NodeOptional n);
+   public R visit(NodeSequence n);
+   public R visit(NodeToken n);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public R visit(TranslationUnit n);
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public R visit(ExternalDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public R visit(FunctionDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public R visit(StorageClassSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public R visit(TypeDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(DataType n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public R visit(FunctionType n);
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public R visit(ParameterList n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(ParameterDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public R visit(VariableDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public R visit(LocalVariableDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public R visit(VariableClassSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(TypeSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(NoIdentifierTypeSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(StructOrUnionSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public R visit(StructOrUnion n);
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public R visit(StructDeclarationList n);
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public R visit(InitDeclaratorList n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public R visit(InitDeclarator n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public R visit(StructDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public R visit(EnumSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public R visit(EnumeratorList n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public R visit(Enumerator n);
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public R visit(Pointer n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public R visit(IdentifierList n);
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public R visit(Initializer n);
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public R visit(InitializerList n);
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public R visit(Array n);
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public R visit(Statement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public R visit(LabeledStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public R visit(ExpressionStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public R visit(CompoundStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public R visit(SelectionStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public R visit(IterationStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public R visit(JumpStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public R visit(Expression n);
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public R visit(AssignmentOperator n);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public R visit(ConditionalExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(ConstantExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalORExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalANDExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(InclusiveORExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(ExclusiveORExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public R visit(ANDExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public R visit(EqualityExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public R visit(RelationalExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public R visit(ShiftExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public R visit(AdditiveExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public R visit(MultiplicativeExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public R visit(CastExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public R visit(UnaryExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public R visit(UnaryOperator n);
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public R visit(PostfixExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public R visit(PrimaryExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public R visit(ArgumentExpressionList n);
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentOrTypeExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public R visit(Constant n);
+
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVisitor.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVisitor.java
new file mode 100644 (file)
index 0000000..431c195
--- /dev/null
@@ -0,0 +1,507 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * All GJ visitors must implement this interface.
+ */
+
+public interface GJVisitor<R,A> {
+
+   //
+   // GJ Auto class visitors
+   //
+
+   public R visit(NodeList n, A argu);
+   public R visit(NodeListOptional n, A argu);
+   public R visit(NodeOptional n, A argu);
+   public R visit(NodeSequence n, A argu);
+   public R visit(NodeToken n, A argu);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public R visit(TranslationUnit n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public R visit(ExternalDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public R visit(FunctionDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public R visit(StorageClassSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public R visit(TypeDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(DataType n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public R visit(FunctionType n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public R visit(ParameterList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(ParameterDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public R visit(VariableDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public R visit(LocalVariableDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public R visit(VariableClassSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(TypeSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public R visit(NoIdentifierTypeSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public R visit(StructOrUnionSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public R visit(StructOrUnion n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public R visit(StructDeclarationList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public R visit(InitDeclaratorList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public R visit(InitDeclarator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public R visit(StructDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public R visit(EnumSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public R visit(EnumeratorList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public R visit(Enumerator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public R visit(Pointer n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public R visit(IdentifierList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public R visit(Initializer n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public R visit(InitializerList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public R visit(Array n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public R visit(Statement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public R visit(LabeledStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public R visit(ExpressionStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public R visit(CompoundStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public R visit(SelectionStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public R visit(IterationStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public R visit(JumpStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public R visit(Expression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public R visit(AssignmentOperator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public R visit(ConditionalExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public R visit(ConstantExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalORExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public R visit(LogicalANDExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(InclusiveORExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public R visit(ExclusiveORExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public R visit(ANDExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public R visit(EqualityExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public R visit(RelationalExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public R visit(ShiftExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public R visit(AdditiveExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public R visit(MultiplicativeExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public R visit(CastExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public R visit(UnaryExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public R visit(UnaryOperator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public R visit(PostfixExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public R visit(PrimaryExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public R visit(ArgumentExpressionList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public R visit(AssignmentOrTypeExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public R visit(Constant n, A argu);
+
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVoidDepthFirst.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVoidDepthFirst.java
new file mode 100644 (file)
index 0000000..eb49d36
--- /dev/null
@@ -0,0 +1,711 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class GJVoidDepthFirst<A> implements GJVoidVisitor<A> {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public void visit(NodeList n, A argu) {
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+   }
+
+   public void visit(NodeListOptional n, A argu) {
+      if ( n.present() ) {
+         int _count=0;
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+            e.nextElement().accept(this,argu);
+            _count++;
+         }
+      }
+   }
+
+   public void visit(NodeOptional n, A argu) {
+      if ( n.present() )
+         n.node.accept(this,argu);
+   }
+
+   public void visit(NodeSequence n, A argu) {
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+   }
+
+   public void visit(NodeToken n, A argu) {}
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public void visit(TranslationUnit n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public void visit(ExternalDeclaration n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public void visit(FunctionDeclaration n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      n.f5.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public void visit(StorageClassSpecifier n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public void visit(TypeDeclaration n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(DataType n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public void visit(FunctionType n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      n.f5.accept(this, argu);
+      n.f6.accept(this, argu);
+      n.f7.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public void visit(ParameterList n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(ParameterDeclaration n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public void visit(VariableDeclaration n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public void visit(LocalVariableDeclaration n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public void visit(VariableClassSpecifier n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(TypeSpecifier n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(NoIdentifierTypeSpecifier n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(StructOrUnionSpecifier n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public void visit(StructOrUnion n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public void visit(StructDeclarationList n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public void visit(InitDeclaratorList n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public void visit(InitDeclarator n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public void visit(StructDeclaration n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public void visit(EnumSpecifier n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public void visit(EnumeratorList n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public void visit(Enumerator n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public void visit(Pointer n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public void visit(IdentifierList n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public void visit(Initializer n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public void visit(InitializerList n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public void visit(Array n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public void visit(Statement n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public void visit(LabeledStatement n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public void visit(ExpressionStatement n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public void visit(CompoundStatement n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public void visit(SelectionStatement n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public void visit(IterationStatement n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public void visit(JumpStatement n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public void visit(Expression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentExpression n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public void visit(AssignmentOperator n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public void visit(ConditionalExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(ConstantExpression n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalORExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalANDExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(InclusiveORExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(ExclusiveORExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public void visit(ANDExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public void visit(EqualityExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public void visit(RelationalExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public void visit(ShiftExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public void visit(AdditiveExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public void visit(MultiplicativeExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public void visit(CastExpression n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public void visit(UnaryExpression n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public void visit(UnaryOperator n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public void visit(PostfixExpression n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public void visit(PrimaryExpression n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public void visit(ArgumentExpressionList n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentOrTypeExpression n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public void visit(Constant n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVoidVisitor.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/GJVoidVisitor.java
new file mode 100644 (file)
index 0000000..13176c4
--- /dev/null
@@ -0,0 +1,508 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * All GJ void visitors must implement this interface.
+ */
+
+public interface GJVoidVisitor<A> {
+
+   //
+   // GJ void Auto class visitors
+   //
+
+   public void visit(NodeList n, A argu);
+   public void visit(NodeListOptional n, A argu);
+   public void visit(NodeOptional n, A argu);
+   public void visit(NodeSequence n, A argu);
+   public void visit(NodeToken n, A argu);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public void visit(TranslationUnit n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public void visit(ExternalDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public void visit(FunctionDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public void visit(StorageClassSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public void visit(TypeDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(DataType n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public void visit(FunctionType n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public void visit(ParameterList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(ParameterDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public void visit(VariableDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public void visit(LocalVariableDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public void visit(VariableClassSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(TypeSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(NoIdentifierTypeSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(StructOrUnionSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public void visit(StructOrUnion n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public void visit(StructDeclarationList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public void visit(InitDeclaratorList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public void visit(InitDeclarator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public void visit(StructDeclaration n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public void visit(EnumSpecifier n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public void visit(EnumeratorList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public void visit(Enumerator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public void visit(Pointer n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public void visit(IdentifierList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public void visit(Initializer n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public void visit(InitializerList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public void visit(Array n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public void visit(Statement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public void visit(LabeledStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public void visit(ExpressionStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public void visit(CompoundStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public void visit(SelectionStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public void visit(IterationStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public void visit(JumpStatement n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public void visit(Expression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public void visit(AssignmentOperator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public void visit(ConditionalExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(ConstantExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalORExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalANDExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(InclusiveORExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(ExclusiveORExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public void visit(ANDExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public void visit(EqualityExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public void visit(RelationalExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public void visit(ShiftExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public void visit(AdditiveExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public void visit(MultiplicativeExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public void visit(CastExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public void visit(UnaryExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public void visit(UnaryOperator n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public void visit(PostfixExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public void visit(PrimaryExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public void visit(ArgumentExpressionList n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentOrTypeExpression n, A argu);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public void visit(Constant n, A argu);
+
+}
+
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/TreeDumper.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/TreeDumper.java
new file mode 100644 (file)
index 0000000..c2e7c15
--- /dev/null
@@ -0,0 +1,132 @@
+//
+// Generated by JTB 1.3.2
+//
+package org.gnunet.seaspider.parser.visitors;
+
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+import java.io.*;
+
+/**
+ * Dumps the syntax tree to a Writer using the location information in
+ * each NodeToken.
+ */
+public class TreeDumper extends DepthFirstVisitor {
+   protected PrintWriter out;
+   private int curLine = 1;
+   private int curColumn = 1;
+   private boolean startAtNextToken = false;
+   private boolean printSpecials = true;
+
+   /**
+    * The default constructor uses System.out as its output location.
+    * You may specify your own Writer or OutputStream using one of the
+    * other constructors.
+    */
+   public TreeDumper()       { out = new PrintWriter(System.out, true); }
+   public TreeDumper(Writer o)        { out = new PrintWriter(o, true); }
+   public TreeDumper(OutputStream o)  { out = new PrintWriter(o, true); }
+
+   /**
+    * Flushes the OutputStream or Writer that this TreeDumper is using.
+    */
+   public void flushWriter()        { out.flush(); }
+
+   /**
+    * Allows you to specify whether or not to print special tokens.
+    */
+   public void printSpecials(boolean b)   { printSpecials = b; }
+
+   /**
+    * Starts the tree dumper on the line containing the next token
+    * visited.  For example, if the next token begins on line 50 and the
+    * dumper is currently on line 1 of the file, it will set its current
+    * line to 50 and continue printing from there, as opposed to
+    * printing 49 blank lines and then printing the token.
+    */
+   public void startAtNextToken()   { startAtNextToken = true; }
+
+   /**
+    * Resets the position of the output "cursor" to the first line and
+    * column.  When using a dumper on a syntax tree more than once, you
+    * either need to call this method or startAtNextToken() between each
+    * dump.
+    */
+   public void resetPosition()      { curLine = curColumn = 1; }
+
+   /**
+    * Dumps the current NodeToken to the output stream being used.
+    *
+    * @throws  IllegalStateException   if the token position is invalid
+    *   relative to the current position, i.e. its location places it
+    *   before the previous token.
+    */
+   public void visit(NodeToken n) {
+      if ( n.beginLine == -1 || n.beginColumn == -1 ) {
+         printToken(n.tokenImage);
+         return;
+      }
+
+      //
+      // Handle special tokens
+      //
+      if ( printSpecials && n.numSpecials() > 0 )
+         for ( Enumeration<NodeToken> e = n.specialTokens.elements(); e.hasMoreElements(); )
+            visit(e.nextElement());
+
+      //
+      // Handle startAtNextToken option
+      //
+      if ( startAtNextToken ) {
+         curLine = n.beginLine;
+         curColumn = 1;
+         startAtNextToken = false;
+
+         if ( n.beginColumn < curColumn )
+            out.println();
+      }
+
+      //
+      // Check for invalid token position relative to current position.
+      //
+      if ( n.beginLine < curLine )
+         throw new IllegalStateException("at token \"" + n.tokenImage +
+            "\", n.beginLine = " + Integer.toString(n.beginLine) +
+            ", curLine = " + Integer.toString(curLine));
+      else if ( n.beginLine == curLine && n.beginColumn < curColumn )
+         throw new IllegalStateException("at token \"" + n.tokenImage +
+            "\", n.beginColumn = " +
+            Integer.toString(n.beginColumn) + ", curColumn = " +
+            Integer.toString(curColumn));
+
+      //
+      // Move output "cursor" to proper location, then print the token
+      //
+      if ( curLine < n.beginLine ) {
+         curColumn = 1;
+         for ( ; curLine < n.beginLine; ++curLine )
+            out.println();
+      }
+
+      for ( ; curColumn < n.beginColumn; ++curColumn )
+         out.print(" ");
+
+      printToken(n.tokenImage);
+   }
+
+   private void printToken(String s) {
+      for ( int i = 0; i < s.length(); ++i ) { 
+         if ( s.charAt(i) == '\n' ) {
+            ++curLine;
+            curColumn = 1;
+         }
+         else
+            curColumn++;
+
+         out.print(s.charAt(i));
+      }
+
+      out.flush();
+   }
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/TreeFormatter.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/TreeFormatter.java
new file mode 100644 (file)
index 0000000..7cb5ae0
--- /dev/null
@@ -0,0 +1,980 @@
+//
+// Generated by JTB 1.3.2
+//
+package org.gnunet.seaspider.parser.visitors;
+
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * A skeleton output formatter for your language grammar.  Using the
+ * add() method along with force(), indent(), and outdent(), you can
+ * easily specify how this visitor will format the given syntax tree.
+ * See the JTB documentation for more details.
+ *
+ * Pass your syntax tree to this visitor, and then to the TreeDumper
+ * visitor in order to "pretty print" your tree.
+ */
+public class TreeFormatter extends DepthFirstVisitor {
+   private Vector<FormatCommand> cmdQueue = new Vector<FormatCommand>();
+   private boolean lineWrap;
+   private int wrapWidth;
+   private int indentAmt;
+   private int curLine = 1;
+   private int curColumn = 1;
+   private int curIndent = 0;
+
+   /**
+    * The default constructor assumes an indentation amount of 3 spaces
+    * and no line-wrap.  You may alternately use the other constructor to
+    * specify your own indentation amount and line width.
+    */
+   public TreeFormatter() { this(3, 0); }
+
+   /**
+    * This constructor accepts an indent amount and a line width which is
+    * used to wrap long lines.  If a token's beginColumn value is greater
+    * than the specified wrapWidth, it will be moved to the next line and
+    * indented one extra level.  To turn off line-wrapping, specify a
+    * wrapWidth of 0.
+    *
+    * @param   indentAmt   Amount of spaces per indentation level.
+    * @param   wrapWidth   Wrap lines longer than wrapWidth.  0 for no wrap.
+    */
+   public TreeFormatter(int indentAmt, int wrapWidth) {
+      this.indentAmt = indentAmt;
+      this.wrapWidth = wrapWidth;
+
+      if ( wrapWidth > 0 )
+         lineWrap = true;
+      else
+         lineWrap = false;
+   }
+
+   /**
+    * Accepts a NodeListInterface object and performs an optional format
+    * command between each node in the list (but not after the last node).
+    */
+   protected void processList(NodeListInterface n) {
+      processList(n, null);
+   }
+
+   protected void processList(NodeListInterface n, FormatCommand cmd) {
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this);
+         if ( cmd != null && e.hasMoreElements() )
+            cmdQueue.addElement(cmd);
+      }
+   }
+
+   /**
+    * A Force command inserts a line break and indents the next line to
+    * the current indentation level.  Use "add(force());".
+    */
+   protected FormatCommand force() { return force(1); }
+   protected FormatCommand force(int i) {
+      return new FormatCommand(FormatCommand.FORCE, i);
+   }
+
+   /**
+    * An Indent command increases the indentation level by one (or a
+    * user-specified amount).  Use "add(indent());".
+    */
+   protected FormatCommand indent() { return indent(1); }
+   protected FormatCommand indent(int i) {
+      return new FormatCommand(FormatCommand.INDENT, i);
+   }
+
+   /**
+    * An Outdent command is the reverse of the Indent command: it reduces
+    * the indentation level.  Use "add(outdent());".
+    */
+   protected FormatCommand outdent() { return outdent(1); }
+   protected FormatCommand outdent(int i) {
+      return new FormatCommand(FormatCommand.OUTDENT, i);
+   }
+
+   /**
+    * A Space command simply adds one or a user-specified number of
+    * spaces between tokens.  Use "add(space());".
+    */
+   protected FormatCommand space() { return space(1); }
+   protected FormatCommand space(int i) {
+      return new FormatCommand(FormatCommand.SPACE, i);
+   }
+
+   /**
+    * Use this method to add FormatCommands to the command queue to be
+    * executed when the next token in the tree is visited.
+    */
+   protected void add(FormatCommand cmd) {
+      cmdQueue.addElement(cmd);
+   }
+
+   /**
+    * Executes the commands waiting in the command queue, then inserts the
+    * proper location information into the current NodeToken.
+    *
+    * If there are any special tokens preceding this token, they will be
+    * given the current location information.  The token will follow on
+    * the next line, at the proper indentation level.  If this is not the
+    * behavior you want from special tokens, feel free to modify this
+    * method.
+    */
+   public void visit(NodeToken n) {
+      for ( Enumeration<FormatCommand> e = cmdQueue.elements(); e.hasMoreElements(); ) {
+         FormatCommand cmd = e.nextElement();
+         switch ( cmd.getCommand() ) {
+         case FormatCommand.FORCE :
+            curLine += cmd.getNumCommands();
+            curColumn = curIndent + 1;
+            break;
+         case FormatCommand.INDENT :
+            curIndent += indentAmt * cmd.getNumCommands();
+            break;
+         case FormatCommand.OUTDENT :
+            if ( curIndent >= indentAmt )
+               curIndent -= indentAmt * cmd.getNumCommands();
+            break;
+         case FormatCommand.SPACE :
+            curColumn += cmd.getNumCommands();
+            break;
+         default :
+            throw new TreeFormatterException(
+               "Invalid value in command queue.");
+         }
+      }
+
+      cmdQueue.removeAllElements();
+
+      //
+      // Handle all special tokens preceding this NodeToken
+      //
+      if ( n.numSpecials() > 0 )
+         for ( Enumeration<NodeToken> e = n.specialTokens.elements();
+               e.hasMoreElements(); ) {
+            NodeToken special = e.nextElement();
+
+            //
+            // -Place the token.
+            // -Move cursor to next line after the special token.
+            // -Don't update curColumn--want to keep current indent level.
+            //
+            placeToken(special, curLine, curColumn);
+            curLine = special.endLine + 1;
+         }
+
+      placeToken(n, curLine, curColumn);
+      curLine = n.endLine;
+      curColumn = n.endColumn;
+   }
+
+   /**
+    * Inserts token location (beginLine, beginColumn, endLine, endColumn)
+    * information into the NodeToken.  Takes into account line-wrap.
+    * Does not update curLine and curColumn.
+    */
+   private void placeToken(NodeToken n, int line, int column) {
+      int length = n.tokenImage.length();
+
+      //
+      // Find beginning of token.  Only line-wrap for single-line tokens
+      //
+      if ( !lineWrap || n.tokenImage.indexOf('\n') != -1 ||
+           column + length <= wrapWidth )
+         n.beginColumn = column;
+      else {
+         ++line;
+         column = curIndent + indentAmt + 1;
+         n.beginColumn = column;
+      }
+
+      n.beginLine = line;
+
+      //
+      // Find end of token; don't count \n if it's the last character
+      //
+      for ( int i = 0; i < length; ++i ) {
+         if ( n.tokenImage.charAt(i) == '\n' && i < length - 1 ) {
+            ++line;
+            column = 1;
+         }
+         else
+            ++column;
+      }
+
+      n.endLine = line;
+      n.endColumn = column;
+   }
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public void visit(TranslationUnit n) {
+      processList(n.f0);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public void visit(ExternalDeclaration n) {
+      if ( n.f0.present() ) {
+         processList(n.f0);
+      }
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public void visit(FunctionDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      if ( n.f3.present() ) {
+         n.f3.accept(this);
+      }
+      n.f4.accept(this);
+      n.f5.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public void visit(StorageClassSpecifier n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public void visit(TypeDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(DataType n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public void visit(FunctionType n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      n.f5.accept(this);
+      if ( n.f6.present() ) {
+         n.f6.accept(this);
+      }
+      n.f7.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public void visit(ParameterList n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+      if ( n.f2.present() ) {
+         n.f2.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(ParameterDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      if ( n.f2.present() ) {
+         n.f2.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public void visit(VariableDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public void visit(LocalVariableDeclaration n) {
+      if ( n.f0.present() ) {
+         n.f0.accept(this);
+      }
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public void visit(VariableClassSpecifier n) {
+      if ( n.f0.present() ) {
+         processList(n.f0);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(TypeSpecifier n) {
+      if ( n.f0.present() ) {
+         n.f0.accept(this);
+      }
+      n.f1.accept(this);
+      if ( n.f2.present() ) {
+         n.f2.accept(this);
+      }
+      if ( n.f3.present() ) {
+         n.f3.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(NoIdentifierTypeSpecifier n) {
+      if ( n.f0.present() ) {
+         n.f0.accept(this);
+      }
+      n.f1.accept(this);
+      if ( n.f2.present() ) {
+         n.f2.accept(this);
+      }
+      if ( n.f3.present() ) {
+         n.f3.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(StructOrUnionSpecifier n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public void visit(StructOrUnion n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public void visit(StructDeclarationList n) {
+      processList(n.f0);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public void visit(InitDeclaratorList n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public void visit(InitDeclarator n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+      if ( n.f2.present() ) {
+         n.f2.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public void visit(StructDeclaration n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      if ( n.f2.present() ) {
+         n.f2.accept(this);
+      }
+      if ( n.f3.present() ) {
+         n.f3.accept(this);
+      }
+      n.f4.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public void visit(EnumSpecifier n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public void visit(EnumeratorList n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public void visit(Enumerator n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public void visit(Pointer n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+      if ( n.f2.present() ) {
+         n.f2.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public void visit(IdentifierList n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public void visit(Initializer n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public void visit(InitializerList n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public void visit(Array n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public void visit(Statement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public void visit(LabeledStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public void visit(ExpressionStatement n) {
+      if ( n.f0.present() ) {
+         n.f0.accept(this);
+      }
+      n.f1.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public void visit(CompoundStatement n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+      n.f2.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public void visit(SelectionStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public void visit(IterationStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public void visit(JumpStatement n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public void visit(Expression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public void visit(AssignmentOperator n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public void visit(ConditionalExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(ConstantExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalORExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalANDExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(InclusiveORExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(ExclusiveORExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public void visit(ANDExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public void visit(EqualityExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public void visit(RelationalExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public void visit(ShiftExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public void visit(AdditiveExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public void visit(MultiplicativeExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         n.f1.accept(this);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public void visit(CastExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public void visit(UnaryExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public void visit(UnaryOperator n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public void visit(PostfixExpression n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public void visit(PrimaryExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public void visit(ArgumentExpressionList n) {
+      n.f0.accept(this);
+      if ( n.f1.present() ) {
+         processList(n.f1);
+      }
+   }
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentOrTypeExpression n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public void visit(Constant n) {
+      n.f0.accept(this);
+   }
+
+}
+
+class FormatCommand {
+   public static final int FORCE = 0;
+   public static final int INDENT = 1;
+   public static final int OUTDENT = 2;
+   public static final int SPACE = 3;
+
+   private int command;
+   private int numCommands;
+
+   FormatCommand(int command, int numCommands) {
+      this.command = command;
+      this.numCommands = numCommands;
+   }
+
+   public int getCommand()             { return command; }
+   public int getNumCommands()         { return numCommands; }
+   public void setCommand(int i)       { command = i; }
+   public void setNumCommands(int i)   { numCommands = i; }
+}
+
+class TreeFormatterException extends RuntimeException {
+   TreeFormatterException()         { super(); }
+   TreeFormatterException(String s) { super(s); }
+}
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/Visitor.java b/src/monkey/seaspider/org/gnunet/seaspider/parser/visitors/Visitor.java
new file mode 100644 (file)
index 0000000..456698a
--- /dev/null
@@ -0,0 +1,508 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.gnunet.seaspider.parser.visitors;
+import org.gnunet.seaspider.parser.nodes.*;
+
+import java.util.*;
+
+/**
+ * All void visitors must implement this interface.
+ */
+
+public interface Visitor {
+
+   //
+   // void Auto class visitors
+   //
+
+   public void visit(NodeList n);
+   public void visit(NodeListOptional n);
+   public void visit(NodeOptional n);
+   public void visit(NodeSequence n);
+   public void visit(NodeToken n);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * <PRE>
+    * f0 -> ( ExternalDeclaration() )+
+    * </PRE>
+    */
+   public void visit(TranslationUnit n);
+
+   /**
+    * <PRE>
+    * f0 -> ( StorageClassSpecifier() )*
+    * f1 -> ( FunctionDeclaration() | StructOrUnionSpecifier() | VariableDeclaration() | TypeDeclaration() )
+    * </PRE>
+    */
+   public void visit(ExternalDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> "("
+    * f3 -> [ ParameterList() ]
+    * f4 -> ")"
+    * f5 -> ( ";" | CompoundStatement() )
+    * </PRE>
+    */
+   public void visit(FunctionDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STATIC&gt; | &lt;EXTERN&gt; )
+    * </PRE>
+    */
+   public void visit(StorageClassSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;TYPEDEF&gt;
+    * f1 -> ( DataType() | FunctionType() )
+    * f2 -> ";"
+    * </PRE>
+    */
+   public void visit(TypeDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnionSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(DataType n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> "("
+    * f2 -> "*"
+    * f3 -> &lt;IDENTIFIER&gt;
+    * f4 -> ")"
+    * f5 -> "("
+    * f6 -> [ ParameterList() ]
+    * f7 -> ")"
+    * </PRE>
+    */
+   public void visit(FunctionType n);
+
+   /**
+    * <PRE>
+    * f0 -> ParameterDeclaration()
+    * f1 -> ( "," ParameterDeclaration() )*
+    * f2 -> [ "," "..." ]
+    * </PRE>
+    */
+   public void visit(ParameterList n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(ParameterDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> VariableClassSpecifier()
+    * f1 -> TypeSpecifier()
+    * f2 -> InitDeclaratorList()
+    * f3 -> ";"
+    * </PRE>
+    */
+   public void visit(VariableDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;STATIC&gt; ]
+    * f1 -> VariableDeclaration()
+    * </PRE>
+    */
+   public void visit(LocalVariableDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;AUTO&gt; | &lt;REGISTER&gt; )*
+    * </PRE>
+    */
+   public void visit(VariableClassSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() | &lt;IDENTIFIER&gt; )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(TypeSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> [ &lt;CONST&gt; ]
+    * f1 -> ( &lt;VOID&gt; | &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] | &lt;FLOAT&gt; | &lt;DOUBLE&gt; | ( &lt;SIGNED&gt; | &lt;UNSIGNED&gt; ) [ &lt;CHAR&gt; | &lt;SHORT&gt; [ &lt;INT&gt; ] | &lt;INT&gt; | &lt;LONG&gt; [ &lt;LONG&gt; ] ] | StructOrUnionSpecifier() | EnumSpecifier() )
+    * f2 -> [ Pointer() ]
+    * f3 -> [ Array() ]
+    * </PRE>
+    */
+   public void visit(NoIdentifierTypeSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> StructOrUnion() [ &lt;IDENTIFIER&gt; ] "{" StructDeclarationList() "}"
+    *       | StructOrUnion() &lt;IDENTIFIER&gt;
+    * </PRE>
+    */
+   public void visit(StructOrUnionSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;STRUCT&gt; | &lt;UNION&gt; )
+    * </PRE>
+    */
+   public void visit(StructOrUnion n);
+
+   /**
+    * <PRE>
+    * f0 -> ( StructDeclaration() )+
+    * </PRE>
+    */
+   public void visit(StructDeclarationList n);
+
+   /**
+    * <PRE>
+    * f0 -> InitDeclarator()
+    * f1 -> ( "," InitDeclarator() )*
+    * </PRE>
+    */
+   public void visit(InitDeclaratorList n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ Array() ]
+    * f2 -> [ "=" Initializer() ]
+    * </PRE>
+    */
+   public void visit(InitDeclarator n);
+
+   /**
+    * <PRE>
+    * f0 -> TypeSpecifier()
+    * f1 -> &lt;IDENTIFIER&gt;
+    * f2 -> [ Array() | ":" ConstantExpression() ]
+    * f3 -> [ &lt;IDENTIFIER&gt; ]
+    * f4 -> ";"
+    * </PRE>
+    */
+   public void visit(StructDeclaration n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;ENUM&gt;
+    * f1 -> ( [ &lt;IDENTIFIER&gt; ] "{" EnumeratorList() "}" | &lt;IDENTIFIER&gt; )
+    * </PRE>
+    */
+   public void visit(EnumSpecifier n);
+
+   /**
+    * <PRE>
+    * f0 -> Enumerator()
+    * f1 -> ( "," Enumerator() )*
+    * </PRE>
+    */
+   public void visit(EnumeratorList n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> [ "=" ConstantExpression() ]
+    * </PRE>
+    */
+   public void visit(Enumerator n);
+
+   /**
+    * <PRE>
+    * f0 -> "*"
+    * f1 -> [ &lt;CONST&gt; ]
+    * f2 -> [ Pointer() ]
+    * </PRE>
+    */
+   public void visit(Pointer n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    * f1 -> ( "," &lt;IDENTIFIER&gt; )*
+    * </PRE>
+    */
+   public void visit(IdentifierList n);
+
+   /**
+    * <PRE>
+    * f0 -> ( AssignmentExpression() | "{" InitializerList() [ "," ] "}" )
+    * </PRE>
+    */
+   public void visit(Initializer n);
+
+   /**
+    * <PRE>
+    * f0 -> Initializer()
+    * f1 -> ( "," Initializer() )*
+    * </PRE>
+    */
+   public void visit(InitializerList n);
+
+   /**
+    * <PRE>
+    * f0 -> "["
+    * f1 -> [ ConstantExpression() ]
+    * f2 -> "]"
+    * </PRE>
+    */
+   public void visit(Array n);
+
+   /**
+    * <PRE>
+    * f0 -> ( LabeledStatement() | ExpressionStatement() | CompoundStatement() | SelectionStatement() | IterationStatement() | JumpStatement() )
+    * </PRE>
+    */
+   public void visit(Statement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IDENTIFIER&gt; ":" Statement() | &lt;CASE&gt; ConstantExpression() ":" Statement() | &lt;DFLT&gt; ":" Statement() )
+    * </PRE>
+    */
+   public void visit(LabeledStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> [ Expression() ]
+    * f1 -> ";"
+    * </PRE>
+    */
+   public void visit(ExpressionStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> "{"
+    * f1 -> ( LocalVariableDeclaration() | Statement() )*
+    * f2 -> "}"
+    * </PRE>
+    */
+   public void visit(CompoundStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;IF&gt; "(" Expression() ")" Statement() [ &lt;ELSE&gt; Statement() ] | &lt;SWITCH&gt; "(" Expression() ")" Statement() )
+    * </PRE>
+    */
+   public void visit(SelectionStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;WHILE&gt; "(" Expression() ")" Statement() | &lt;DO&gt; Statement() &lt;WHILE&gt; "(" Expression() ")" ";" | &lt;FOR&gt; "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] ")" Statement() )
+    * </PRE>
+    */
+   public void visit(IterationStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> ( &lt;GOTO&gt; &lt;IDENTIFIER&gt; ";" | &lt;CONTINUE&gt; ";" | &lt;BREAK&gt; ";" | &lt;RETURN&gt; [ Expression() ] ";" )
+    * </PRE>
+    */
+   public void visit(JumpStatement n);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentExpression()
+    * f1 -> ( "," AssignmentExpression() )*
+    * </PRE>
+    */
+   public void visit(Expression n);
+
+   /**
+    * <PRE>
+    * f0 -> UnaryExpression() AssignmentOperator() AssignmentExpression()
+    *       | ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&lt;&lt;=" | "&gt;&gt;=" | "&=" | "^=" | "|=" )
+    * </PRE>
+    */
+   public void visit(AssignmentOperator n);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalORExpression()
+    * f1 -> [ "?" Expression() ":" ConditionalExpression() ]
+    * </PRE>
+    */
+   public void visit(ConditionalExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ConditionalExpression()
+    * </PRE>
+    */
+   public void visit(ConstantExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> LogicalANDExpression()
+    * f1 -> [ "||" LogicalORExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalORExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> InclusiveORExpression()
+    * f1 -> [ "&&" LogicalANDExpression() ]
+    * </PRE>
+    */
+   public void visit(LogicalANDExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ExclusiveORExpression()
+    * f1 -> [ "|" InclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(InclusiveORExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ANDExpression()
+    * f1 -> [ "^" ExclusiveORExpression() ]
+    * </PRE>
+    */
+   public void visit(ExclusiveORExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> EqualityExpression()
+    * f1 -> [ "&" ANDExpression() ]
+    * </PRE>
+    */
+   public void visit(ANDExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> RelationalExpression()
+    * f1 -> [ ( "==" | "!=" ) EqualityExpression() ]
+    * </PRE>
+    */
+   public void visit(EqualityExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ShiftExpression()
+    * f1 -> [ ( "&lt;" | "&gt;" | "&lt;=" | "&gt;=" ) RelationalExpression() ]
+    * </PRE>
+    */
+   public void visit(RelationalExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> AdditiveExpression()
+    * f1 -> [ ( "&lt;&lt;" | "&gt;&gt;" ) ShiftExpression() ]
+    * </PRE>
+    */
+   public void visit(ShiftExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> MultiplicativeExpression()
+    * f1 -> [ ( "+" | "-" ) AdditiveExpression() ]
+    * </PRE>
+    */
+   public void visit(AdditiveExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> CastExpression()
+    * f1 -> [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+    * </PRE>
+    */
+   public void visit(MultiplicativeExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( "(" TypeSpecifier() ")" CastExpression() | UnaryExpression() )
+    * </PRE>
+    */
+   public void visit(CastExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( PostfixExpression() | "++" UnaryExpression() | "--" UnaryExpression() | UnaryOperator() CastExpression() | &lt;SIZEOF&gt; ( UnaryExpression() | "(" TypeSpecifier() ")" ) )
+    * </PRE>
+    */
+   public void visit(UnaryExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> ( "&" | "*" | "+" | "-" | "~" | "!" )
+    * </PRE>
+    */
+   public void visit(UnaryOperator n);
+
+   /**
+    * <PRE>
+    * f0 -> PrimaryExpression()
+    * f1 -> ( "[" Expression() "]" | "(" [ ArgumentExpressionList() ] ")" | "." &lt;IDENTIFIER&gt; | "-&gt;" &lt;IDENTIFIER&gt; | "++" | "--" )*
+    * </PRE>
+    */
+   public void visit(PostfixExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;IDENTIFIER&gt;
+    *       | Constant()
+    *       | "(" Expression() ")"
+    * </PRE>
+    */
+   public void visit(PrimaryExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> AssignmentOrTypeExpression()
+    * f1 -> ( "," AssignmentOrTypeExpression() )*
+    * </PRE>
+    */
+   public void visit(ArgumentExpressionList n);
+
+   /**
+    * <PRE>
+    * f0 -> NoIdentifierTypeSpecifier()
+    *       | AssignmentExpression()
+    * </PRE>
+    */
+   public void visit(AssignmentOrTypeExpression n);
+
+   /**
+    * <PRE>
+    * f0 -> &lt;INTEGER_LITERAL&gt;
+    *       | &lt;FLOATING_POINT_LITERAL&gt;
+    *       | &lt;CHARACTER_LITERAL&gt;
+    *       | &lt;STRING_LITERAL&gt;
+    * </PRE>
+    */
+   public void visit(Constant n);
+
+}
+