diff --git a/build.gradle b/build.gradle
index 8ec310cd441b9cb45e050d7eba8418f3fb9c5475..289bb7505b915148139a228036b09bdbc2fdf816 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,6 +20,10 @@ repositories {
   mavenCentral()
 }
 
+dependencies {
+  implementation(project(":sablecc-runtime"))
+}
+
 java {
   sourceCompatibility = JavaVersion.VERSION_1_7
   targetCompatibility = JavaVersion.VERSION_1_7
@@ -39,6 +43,52 @@ processResources {
   }
 }
 
+// Run this task to regenerate the SableCC parser using itself.
+// The generated files are checked into Git,
+// to avoid bootstrapping problems,
+// so normally you do not need to run this task to build the parser.
+// If you change something in the parser generator or templates that affects the output,
+// please run this task manually and commit the updated generated files.
+tasks.register("regenerateParser", JavaExec) {
+  final sableCCGrammar = file("src/main/sablecc/sablecc-3x.sablecc3")
+  final outputDirs = [
+    "src/main/java/org/sablecc/sablecc/analysis",
+    "src/main/java/org/sablecc/sablecc/lexer",
+    "src/main/java/org/sablecc/sablecc/node",
+    "src/main/java/org/sablecc/sablecc/parser",
+    "src/main/resources/org/sablecc/sablecc/lexer",
+    "src/main/resources/org/sablecc/sablecc/parser",
+  ].collect {file(it)}
+  
+  inputs.file(sableCCGrammar)
+  outputs.dir(temporaryDir)
+  outputs.dirs(outputDirs)
+  
+  doFirst {
+    delete(temporaryDir)
+    mkdir(temporaryDir)
+  }
+  
+  classpath(sourceSets.main.runtimeClasspath)
+  mainClass = application.mainClass
+  args = ["-d", temporaryDir, sableCCGrammar]
+  
+  doLast {
+    delete(outputDirs)
+    // Split the generated files - the .dat files go into resources, the .java files go into java.
+    copy {
+      from(temporaryDir)
+      into("src/main/java")
+      exclude("**/*.dat")
+    }
+    copy {
+      from(temporaryDir)
+      into("src/main/resources")
+      include("**/*.dat")
+    }
+  }
+}
+
 jar {
   manifest {
     attributes([
diff --git a/src/main/java/org/sablecc/sablecc/analysis/Analysis.java b/src/main/java/org/sablecc/sablecc/analysis/Analysis.java
index ebd36386bb541d8aaeca56e5181e9eb662fab9ca..1aba701931e99def957945a90bfea38e3cf7fe06 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/Analysis.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/Analysis.java
@@ -6,97 +6,97 @@ import org.sablecc.sablecc.node.*;
 
 public interface Analysis extends Switch
 {
-  Object getIn(Node node);
-  void setIn(Node node, Object in);
-  Object getOut(Node node);
-  void setOut(Node node, Object out);
+    Object getIn(Node node);
+    void setIn(Node node, Object o);
+    Object getOut(Node node);
+    void setOut(Node node, Object o);
 
-  void caseStart(Start node);
-  void caseAGrammar(AGrammar node);
-  void caseAHelpers(AHelpers node);
-  void caseAHelperDef(AHelperDef node);
-  void caseAStates(AStates node);
-  void caseATokens(ATokens node);
-  void caseATokenDef(ATokenDef node);
-  void caseAStateList(AStateList node);
-  void caseAStateListTail(AStateListTail node);
-  void caseATransition(ATransition node);
-  void caseAIgnTokens(AIgnTokens node);
-  void caseARegExp(ARegExp node);
-  void caseAConcat(AConcat node);
-  void caseAUnExp(AUnExp node);
-  void caseACharBasic(ACharBasic node);
-  void caseASetBasic(ASetBasic node);
-  void caseAStringBasic(AStringBasic node);
-  void caseAIdBasic(AIdBasic node);
-  void caseARegExpBasic(ARegExpBasic node);
-  void caseACharChar(ACharChar node);
-  void caseADecChar(ADecChar node);
-  void caseAHexChar(AHexChar node);
-  void caseAOperationSet(AOperationSet node);
-  void caseAIntervalSet(AIntervalSet node);
-  void caseAStarUnOp(AStarUnOp node);
-  void caseAQMarkUnOp(AQMarkUnOp node);
-  void caseAPlusUnOp(APlusUnOp node);
-  void caseAPlusBinOp(APlusBinOp node);
-  void caseAMinusBinOp(AMinusBinOp node);
-  void caseAProductions(AProductions node);
-  void caseAProd(AProd node);
-  void caseAAlt(AAlt node);
-  void caseAAltTransform(AAltTransform node);
-  void caseANewTerm(ANewTerm node);
-  void caseAListTerm(AListTerm node);
-  void caseASimpleTerm(ASimpleTerm node);
-  void caseANullTerm(ANullTerm node);
-  void caseANewListTerm(ANewListTerm node);
-  void caseASimpleListTerm(ASimpleListTerm node);
-  void caseAProdName(AProdName node);
-  void caseAElem(AElem node);
-  void caseATokenSpecifier(ATokenSpecifier node);
-  void caseAProductionSpecifier(AProductionSpecifier node);
-  void caseAAst(AAst node);
-  void caseAAstProd(AAstProd node);
-  void caseAAstAlt(AAstAlt node);
+    void caseStart(Start node);
+    void caseAGrammar(AGrammar node);
+    void caseAHelpers(AHelpers node);
+    void caseAHelperDef(AHelperDef node);
+    void caseAStates(AStates node);
+    void caseATokens(ATokens node);
+    void caseATokenDef(ATokenDef node);
+    void caseAStateList(AStateList node);
+    void caseAStateListTail(AStateListTail node);
+    void caseATransition(ATransition node);
+    void caseAIgnTokens(AIgnTokens node);
+    void caseARegExp(ARegExp node);
+    void caseAConcat(AConcat node);
+    void caseAUnExp(AUnExp node);
+    void caseACharBasic(ACharBasic node);
+    void caseASetBasic(ASetBasic node);
+    void caseAStringBasic(AStringBasic node);
+    void caseAIdBasic(AIdBasic node);
+    void caseARegExpBasic(ARegExpBasic node);
+    void caseACharChar(ACharChar node);
+    void caseADecChar(ADecChar node);
+    void caseAHexChar(AHexChar node);
+    void caseAOperationSet(AOperationSet node);
+    void caseAIntervalSet(AIntervalSet node);
+    void caseAStarUnOp(AStarUnOp node);
+    void caseAQMarkUnOp(AQMarkUnOp node);
+    void caseAPlusUnOp(APlusUnOp node);
+    void caseAPlusBinOp(APlusBinOp node);
+    void caseAMinusBinOp(AMinusBinOp node);
+    void caseAProductions(AProductions node);
+    void caseAProd(AProd node);
+    void caseAAlt(AAlt node);
+    void caseAAltTransform(AAltTransform node);
+    void caseANewTerm(ANewTerm node);
+    void caseAListTerm(AListTerm node);
+    void caseASimpleTerm(ASimpleTerm node);
+    void caseANullTerm(ANullTerm node);
+    void caseANewListTerm(ANewListTerm node);
+    void caseASimpleListTerm(ASimpleListTerm node);
+    void caseAProdName(AProdName node);
+    void caseAElem(AElem node);
+    void caseATokenSpecifier(ATokenSpecifier node);
+    void caseAProductionSpecifier(AProductionSpecifier node);
+    void caseAAst(AAst node);
+    void caseAAstProd(AAstProd node);
+    void caseAAstAlt(AAstAlt node);
 
-  void caseTPkgId(TPkgId node);
-  void caseTPackage(TPackage node);
-  void caseTStates(TStates node);
-  void caseTHelpers(THelpers node);
-  void caseTTokens(TTokens node);
-  void caseTIgnored(TIgnored node);
-  void caseTProductions(TProductions node);
-  void caseTAbstract(TAbstract node);
-  void caseTSyntax(TSyntax node);
-  void caseTTree(TTree node);
-  void caseTNew(TNew node);
-  void caseTNull(TNull node);
-  void caseTTokenSpecifier(TTokenSpecifier node);
-  void caseTProductionSpecifier(TProductionSpecifier node);
-  void caseTDot(TDot node);
-  void caseTDDot(TDDot node);
-  void caseTSemicolon(TSemicolon node);
-  void caseTEqual(TEqual node);
-  void caseTLBkt(TLBkt node);
-  void caseTRBkt(TRBkt node);
-  void caseTLPar(TLPar node);
-  void caseTRPar(TRPar node);
-  void caseTLBrace(TLBrace node);
-  void caseTRBrace(TRBrace node);
-  void caseTPlus(TPlus node);
-  void caseTMinus(TMinus node);
-  void caseTQMark(TQMark node);
-  void caseTStar(TStar node);
-  void caseTBar(TBar node);
-  void caseTComma(TComma node);
-  void caseTSlash(TSlash node);
-  void caseTArrow(TArrow node);
-  void caseTColon(TColon node);
-  void caseTId(TId node);
-  void caseTChar(TChar node);
-  void caseTDecChar(TDecChar node);
-  void caseTHexChar(THexChar node);
-  void caseTString(TString node);
-  void caseTBlank(TBlank node);
-  void caseTComment(TComment node);
-  void caseEOF(EOF node);
+    void caseTPkgId(TPkgId node);
+    void caseTPackage(TPackage node);
+    void caseTStates(TStates node);
+    void caseTHelpers(THelpers node);
+    void caseTTokens(TTokens node);
+    void caseTIgnored(TIgnored node);
+    void caseTProductions(TProductions node);
+    void caseTAbstract(TAbstract node);
+    void caseTSyntax(TSyntax node);
+    void caseTTree(TTree node);
+    void caseTNew(TNew node);
+    void caseTNull(TNull node);
+    void caseTTokenSpecifier(TTokenSpecifier node);
+    void caseTProductionSpecifier(TProductionSpecifier node);
+    void caseTDot(TDot node);
+    void caseTDDot(TDDot node);
+    void caseTSemicolon(TSemicolon node);
+    void caseTEqual(TEqual node);
+    void caseTLBkt(TLBkt node);
+    void caseTRBkt(TRBkt node);
+    void caseTLPar(TLPar node);
+    void caseTRPar(TRPar node);
+    void caseTLBrace(TLBrace node);
+    void caseTRBrace(TRBrace node);
+    void caseTPlus(TPlus node);
+    void caseTMinus(TMinus node);
+    void caseTQMark(TQMark node);
+    void caseTStar(TStar node);
+    void caseTBar(TBar node);
+    void caseTComma(TComma node);
+    void caseTSlash(TSlash node);
+    void caseTArrow(TArrow node);
+    void caseTColon(TColon node);
+    void caseTId(TId node);
+    void caseTChar(TChar node);
+    void caseTDecChar(TDecChar node);
+    void caseTHexChar(THexChar node);
+    void caseTString(TString node);
+    void caseTBlank(TBlank node);
+    void caseTComment(TComment node);
+    void caseEOF(EOF node);
 }
diff --git a/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
index b128fdfc95f36d982254cba18c1ccf7b4e0480a7..3f15aaec25d1b14bd6ba3064a971e8da8d55fbe6 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
@@ -7,497 +7,500 @@ import org.sablecc.sablecc.node.*;
 
 public class AnalysisAdapter implements Analysis
 {
-  private Hashtable in;
-  private Hashtable out;
+    private Hashtable<Node,Object> in;
+    private Hashtable<Node,Object> out;
 
-  public Object getIn(Node node)
-  {
-    if(in == null)
+    public Object getIn(Node node)
     {
-      return null;
+        if(this.in == null)
+        {
+            return null;
+        }
+
+        return this.in.get(node);
+    }
+
+    public void setIn(Node node, Object o)
+    {
+        if(this.in == null)
+        {
+            this.in = new Hashtable<Node,Object>(1);
+        }
+
+        if(o != null)
+        {
+            this.in.put(node, o);
+        }
+        else
+        {
+            this.in.remove(node);
+        }
+    }
+
+    public Object getOut(Node node)
+    {
+        if(this.out == null)
+        {
+            return null;
+        }
+
+        return this.out.get(node);
+    }
+
+    public void setOut(Node node, Object o)
+    {
+        if(this.out == null)
+        {
+            this.out = new Hashtable<Node,Object>(1);
+        }
+
+        if(o != null)
+        {
+            this.out.put(node, o);
+        }
+        else
+        {
+            this.out.remove(node);
+        }
+    }
+
+    public void caseStart(Start node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAGrammar(AGrammar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAHelpers(AHelpers node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAHelperDef(AHelperDef node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAStates(AStates node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseATokens(ATokens node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseATokenDef(ATokenDef node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAStateList(AStateList node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAStateListTail(AStateListTail node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseATransition(ATransition node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAIgnTokens(AIgnTokens node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseARegExp(ARegExp node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAConcat(AConcat node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAUnExp(AUnExp node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseACharBasic(ACharBasic node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseASetBasic(ASetBasic node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAStringBasic(AStringBasic node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAIdBasic(AIdBasic node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseARegExpBasic(ARegExpBasic node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseACharChar(ACharChar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseADecChar(ADecChar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAHexChar(AHexChar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAOperationSet(AOperationSet node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAIntervalSet(AIntervalSet node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAStarUnOp(AStarUnOp node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAQMarkUnOp(AQMarkUnOp node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAPlusUnOp(APlusUnOp node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAPlusBinOp(APlusBinOp node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAMinusBinOp(AMinusBinOp node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAProductions(AProductions node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAProd(AProd node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAAlt(AAlt node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAAltTransform(AAltTransform node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseANewTerm(ANewTerm node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseAListTerm(AListTerm node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseASimpleTerm(ASimpleTerm node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseANullTerm(ANullTerm node)
+    {
+        defaultCase(node);
     }
 
-    return in.get(node);
-  }
+    public void caseANewListTerm(ANewListTerm node)
+    {
+        defaultCase(node);
+    }
 
-  public void setIn(Node node, Object in)
-  {
-    if(this.in == null)
+    public void caseASimpleListTerm(ASimpleListTerm node)
     {
-      this.in = new Hashtable(1);
+        defaultCase(node);
     }
 
-    if(in != null)
+    public void caseAProdName(AProdName node)
     {
-      this.in.put(node, in);
+        defaultCase(node);
     }
-    else
+
+    public void caseAElem(AElem node)
     {
-      this.in.remove(node);
+        defaultCase(node);
     }
-  }
 
-  public Object getOut(Node node)
-  {
-    if(out == null)
+    public void caseATokenSpecifier(ATokenSpecifier node)
     {
-      return null;
+        defaultCase(node);
     }
 
-    return out.get(node);
-  }
+    public void caseAProductionSpecifier(AProductionSpecifier node)
+    {
+        defaultCase(node);
+    }
 
-  public void setOut(Node node, Object out)
-  {
-    if(this.out == null)
+    public void caseAAst(AAst node)
     {
-      this.out = new Hashtable(1);
+        defaultCase(node);
     }
 
-    if(out != null)
+    public void caseAAstProd(AAstProd node)
     {
-      this.out.put(node, out);
+        defaultCase(node);
     }
-    else
+
+    public void caseAAstAlt(AAstAlt node)
     {
-      this.out.remove(node);
+        defaultCase(node);
     }
-  }
-  public void caseStart(Start node)
-  {
-    defaultCase(node);
-  }
 
-  public void caseAGrammar(AGrammar node)
-  {
-    defaultCase(node);
-  }
+    public void caseTPkgId(TPkgId node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseAHelpers(AHelpers node)
-  {
-    defaultCase(node);
-  }
+    public void caseTPackage(TPackage node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseAHelperDef(AHelperDef node)
-  {
-    defaultCase(node);
-  }
+    public void caseTStates(TStates node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseAStates(AStates node)
-  {
-    defaultCase(node);
-  }
+    public void caseTHelpers(THelpers node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseATokens(ATokens node)
-  {
-    defaultCase(node);
-  }
+    public void caseTTokens(TTokens node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseATokenDef(ATokenDef node)
-  {
-    defaultCase(node);
-  }
+    public void caseTIgnored(TIgnored node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseAStateList(AStateList node)
-  {
-    defaultCase(node);
-  }
+    public void caseTProductions(TProductions node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseAStateListTail(AStateListTail node)
-  {
-    defaultCase(node);
-  }
+    public void caseTAbstract(TAbstract node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseATransition(ATransition node)
-  {
-    defaultCase(node);
-  }
+    public void caseTSyntax(TSyntax node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseAIgnTokens(AIgnTokens node)
-  {
-    defaultCase(node);
-  }
+    public void caseTTree(TTree node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseARegExp(ARegExp node)
-  {
-    defaultCase(node);
-  }
+    public void caseTNew(TNew node)
+    {
+        defaultCase(node);
+    }
 
-  public void caseAConcat(AConcat node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAUnExp(AUnExp node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseACharBasic(ACharBasic node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseASetBasic(ASetBasic node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAStringBasic(AStringBasic node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAIdBasic(AIdBasic node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseARegExpBasic(ARegExpBasic node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseACharChar(ACharChar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseADecChar(ADecChar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAHexChar(AHexChar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAOperationSet(AOperationSet node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAIntervalSet(AIntervalSet node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAStarUnOp(AStarUnOp node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAQMarkUnOp(AQMarkUnOp node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAPlusUnOp(APlusUnOp node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAPlusBinOp(APlusBinOp node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAMinusBinOp(AMinusBinOp node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAProductions(AProductions node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAProd(AProd node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAAlt(AAlt node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAAltTransform(AAltTransform node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseANewTerm(ANewTerm node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAListTerm(AListTerm node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseASimpleTerm(ASimpleTerm node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseANullTerm(ANullTerm node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseANewListTerm(ANewListTerm node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseASimpleListTerm(ASimpleListTerm node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAProdName(AProdName node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAElem(AElem node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseATokenSpecifier(ATokenSpecifier node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAProductionSpecifier(AProductionSpecifier node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAAst(AAst node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAAstProd(AAstProd node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseAAstAlt(AAstAlt node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTPkgId(TPkgId node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTPackage(TPackage node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTStates(TStates node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTHelpers(THelpers node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTTokens(TTokens node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTIgnored(TIgnored node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTProductions(TProductions node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTAbstract(TAbstract node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTSyntax(TSyntax node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTTree(TTree node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTNew(TNew node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTNull(TNull node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTTokenSpecifier(TTokenSpecifier node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTProductionSpecifier(TProductionSpecifier node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTDot(TDot node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTDDot(TDDot node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTSemicolon(TSemicolon node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTEqual(TEqual node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTLBkt(TLBkt node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTRBkt(TRBkt node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTLPar(TLPar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTRPar(TRPar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTLBrace(TLBrace node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTRBrace(TRBrace node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTPlus(TPlus node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTMinus(TMinus node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTQMark(TQMark node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTStar(TStar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTBar(TBar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTComma(TComma node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTSlash(TSlash node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTArrow(TArrow node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTColon(TColon node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTId(TId node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTChar(TChar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTDecChar(TDecChar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTHexChar(THexChar node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTString(TString node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTBlank(TBlank node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseTComment(TComment node)
-  {
-    defaultCase(node);
-  }
-
-  public void caseEOF(EOF node)
-  {
-    defaultCase(node);
-  }
-
-  public void defaultCase(Node node)
-  {}
+    public void caseTNull(TNull node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTTokenSpecifier(TTokenSpecifier node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTProductionSpecifier(TProductionSpecifier node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTDot(TDot node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTDDot(TDDot node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTSemicolon(TSemicolon node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTEqual(TEqual node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTLBkt(TLBkt node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTRBkt(TRBkt node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTLPar(TLPar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTRPar(TRPar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTLBrace(TLBrace node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTRBrace(TRBrace node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTPlus(TPlus node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTMinus(TMinus node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTQMark(TQMark node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTStar(TStar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTBar(TBar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTComma(TComma node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTSlash(TSlash node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTArrow(TArrow node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTColon(TColon node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTId(TId node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTChar(TChar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTDecChar(TDecChar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTHexChar(THexChar node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTString(TString node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTBlank(TBlank node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseTComment(TComment node)
+    {
+        defaultCase(node);
+    }
+
+    public void caseEOF(EOF node)
+    {
+        defaultCase(node);
+    }
+
+    public void defaultCase(  Node node)
+    {
+        // do nothing
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
index 156967d9f0f68dd3a679151e58111432f27ddd6d..e13757f5e6b97c4b10678c272816fd204366cf9f 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
@@ -7,1124 +7,1177 @@ import org.sablecc.sablecc.node.*;
 
 public class DepthFirstAdapter extends AnalysisAdapter
 {
-  public void inStart(Start node)
-  {
-    defaultIn(node);
-  }
 
-  public void outStart(Start node)
-  {
-    defaultOut(node);
-  }
+    final List<Void> dummy = new ArrayList<Void>();
 
-  public void defaultIn(Node node)
-  {}
-
-  public void defaultOut(Node node)
-  {}
-
-  public void caseStart(Start node)
-  {
-    inStart(node);
-    node.getPGrammar().apply(this);
-    node.getEOF().apply(this);
-    outStart(node);
-  }
-
-  public void inAGrammar(AGrammar node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAGrammar(AGrammar node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAGrammar(AGrammar node)
-  {
-    inAGrammar(node);
+    public void inStart(Start node)
     {
-      Object temp[] = node.getPackage().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((TPkgId) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    if(node.getHelpers() != null)
+
+    public void outStart(Start node)
     {
-      node.getHelpers().apply(this);
+        defaultOut(node);
     }
-    if(node.getStates() != null)
+
+    public void defaultIn(  Node node)
     {
-      node.getStates().apply(this);
+        // Do nothing
     }
-    if(node.getTokens() != null)
+
+    public void defaultOut(  Node node)
     {
-      node.getTokens().apply(this);
+        // Do nothing
     }
-    if(node.getIgnTokens() != null)
+
+    @Override
+    public void caseStart(Start node)
     {
-      node.getIgnTokens().apply(this);
+        inStart(node);
+        node.getPGrammar().apply(this);
+        node.getEOF().apply(this);
+        outStart(node);
     }
-    if(node.getProductions() != null)
+
+    public void inAGrammar(AGrammar node)
     {
-      node.getProductions().apply(this);
+        defaultIn(node);
     }
-    if(node.getAst() != null)
+
+    public void outAGrammar(AGrammar node)
     {
-      node.getAst().apply(this);
+        defaultOut(node);
     }
-    outAGrammar(node);
-  }
-
-  public void inAHelpers(AHelpers node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAHelpers(AHelpers node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseAHelpers(AHelpers node)
-  {
-    inAHelpers(node);
+    @Override
+    public void caseAGrammar(AGrammar node)
     {
-      Object temp[] = node.getHelperDefs().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PHelperDef) temp[i]).apply(this);
-      }
+        inAGrammar(node);
+        {
+            List<TPkgId> copy = new ArrayList<TPkgId>(node.getPackage());
+            for(TPkgId e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getHelpers() != null)
+        {
+            node.getHelpers().apply(this);
+        }
+        if(node.getStates() != null)
+        {
+            node.getStates().apply(this);
+        }
+        if(node.getTokens() != null)
+        {
+            node.getTokens().apply(this);
+        }
+        if(node.getIgnTokens() != null)
+        {
+            node.getIgnTokens().apply(this);
+        }
+        if(node.getProductions() != null)
+        {
+            node.getProductions().apply(this);
+        }
+        if(node.getAst() != null)
+        {
+            node.getAst().apply(this);
+        }
+        outAGrammar(node);
     }
-    outAHelpers(node);
-  }
 
-  public void inAHelperDef(AHelperDef node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAHelperDef(AHelperDef node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAHelperDef(AHelperDef node)
-  {
-    inAHelperDef(node);
-    if(node.getId() != null)
+    public void inAHelpers(AHelpers node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    if(node.getRegExp() != null)
+
+    public void outAHelpers(AHelpers node)
     {
-      node.getRegExp().apply(this);
+        defaultOut(node);
     }
-    outAHelperDef(node);
-  }
 
-  public void inAStates(AStates node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAStates(AStates node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAStates(AStates node)
-  {
-    inAStates(node);
+    @Override
+    public void caseAHelpers(AHelpers node)
     {
-      Object temp[] = node.getListId().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((TId) temp[i]).apply(this);
-      }
+        inAHelpers(node);
+        {
+            List<PHelperDef> copy = new ArrayList<PHelperDef>(node.getHelperDefs());
+            for(PHelperDef e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAHelpers(node);
     }
-    outAStates(node);
-  }
-
-  public void inATokens(ATokens node)
-  {
-    defaultIn(node);
-  }
 
-  public void outATokens(ATokens node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseATokens(ATokens node)
-  {
-    inATokens(node);
+    public void inAHelperDef(AHelperDef node)
     {
-      Object temp[] = node.getTokenDefs().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PTokenDef) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outATokens(node);
-  }
-
-  public void inATokenDef(ATokenDef node)
-  {
-    defaultIn(node);
-  }
-
-  public void outATokenDef(ATokenDef node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseATokenDef(ATokenDef node)
-  {
-    inATokenDef(node);
-    if(node.getStateList() != null)
+    public void outAHelperDef(AHelperDef node)
     {
-      node.getStateList().apply(this);
+        defaultOut(node);
     }
-    if(node.getId() != null)
+
+    @Override
+    public void caseAHelperDef(AHelperDef node)
     {
-      node.getId().apply(this);
+        inAHelperDef(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getRegExp() != null)
+        {
+            node.getRegExp().apply(this);
+        }
+        outAHelperDef(node);
     }
-    if(node.getRegExp() != null)
+
+    public void inAStates(AStates node)
     {
-      node.getRegExp().apply(this);
+        defaultIn(node);
     }
-    if(node.getSlash() != null)
+
+    public void outAStates(AStates node)
     {
-      node.getSlash().apply(this);
+        defaultOut(node);
     }
-    if(node.getLookAhead() != null)
+
+    @Override
+    public void caseAStates(AStates node)
     {
-      node.getLookAhead().apply(this);
+        inAStates(node);
+        {
+            List<TId> copy = new ArrayList<TId>(node.getListId());
+            for(TId e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAStates(node);
     }
-    outATokenDef(node);
-  }
-
-  public void inAStateList(AStateList node)
-  {
-    defaultIn(node);
-  }
 
-  public void outAStateList(AStateList node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAStateList(AStateList node)
-  {
-    inAStateList(node);
-    if(node.getId() != null)
+    public void inATokens(ATokens node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    if(node.getTransition() != null)
+
+    public void outATokens(ATokens node)
     {
-      node.getTransition().apply(this);
+        defaultOut(node);
     }
+
+    @Override
+    public void caseATokens(ATokens node)
     {
-      Object temp[] = node.getStateLists().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PStateListTail) temp[i]).apply(this);
-      }
+        inATokens(node);
+        {
+            List<PTokenDef> copy = new ArrayList<PTokenDef>(node.getTokenDefs());
+            for(PTokenDef e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outATokens(node);
     }
-    outAStateList(node);
-  }
-
-  public void inAStateListTail(AStateListTail node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAStateListTail(AStateListTail node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseAStateListTail(AStateListTail node)
-  {
-    inAStateListTail(node);
-    if(node.getId() != null)
+    public void inATokenDef(ATokenDef node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    if(node.getTransition() != null)
+
+    public void outATokenDef(ATokenDef node)
     {
-      node.getTransition().apply(this);
+        defaultOut(node);
     }
-    outAStateListTail(node);
-  }
-
-  public void inATransition(ATransition node)
-  {
-    defaultIn(node);
-  }
-
-  public void outATransition(ATransition node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseATransition(ATransition node)
-  {
-    inATransition(node);
-    if(node.getId() != null)
+    @Override
+    public void caseATokenDef(ATokenDef node)
     {
-      node.getId().apply(this);
+        inATokenDef(node);
+        if(node.getStateList() != null)
+        {
+            node.getStateList().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getRegExp() != null)
+        {
+            node.getRegExp().apply(this);
+        }
+        if(node.getSlash() != null)
+        {
+            node.getSlash().apply(this);
+        }
+        if(node.getLookAhead() != null)
+        {
+            node.getLookAhead().apply(this);
+        }
+        outATokenDef(node);
     }
-    outATransition(node);
-  }
 
-  public void inAIgnTokens(AIgnTokens node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAIgnTokens(AIgnTokens node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAIgnTokens(AIgnTokens node)
-  {
-    inAIgnTokens(node);
+    public void inAStateList(AStateList node)
     {
-      Object temp[] = node.getListId().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((TId) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outAIgnTokens(node);
-  }
-
-  public void inARegExp(ARegExp node)
-  {
-    defaultIn(node);
-  }
 
-  public void outARegExp(ARegExp node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseARegExp(ARegExp node)
-  {
-    inARegExp(node);
+    public void outAStateList(AStateList node)
     {
-      Object temp[] = node.getConcats().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PConcat) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    outARegExp(node);
-  }
-
-  public void inAConcat(AConcat node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAConcat(AConcat node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseAConcat(AConcat node)
-  {
-    inAConcat(node);
+    @Override
+    public void caseAStateList(AStateList node)
     {
-      Object temp[] = node.getUnExps().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PUnExp) temp[i]).apply(this);
-      }
+        inAStateList(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getTransition() != null)
+        {
+            node.getTransition().apply(this);
+        }
+        {
+            List<PStateListTail> copy = new ArrayList<PStateListTail>(node.getStateLists());
+            for(PStateListTail e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAStateList(node);
     }
-    outAConcat(node);
-  }
 
-  public void inAUnExp(AUnExp node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAUnExp(AUnExp node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAUnExp(AUnExp node)
-  {
-    inAUnExp(node);
-    if(node.getBasic() != null)
-    {
-      node.getBasic().apply(this);
-    }
-    if(node.getUnOp() != null)
-    {
-      node.getUnOp().apply(this);
+    public void inAStateListTail(AStateListTail node)
+    {
+        defaultIn(node);
     }
-    outAUnExp(node);
-  }
 
-  public void inACharBasic(ACharBasic node)
-  {
-    defaultIn(node);
-  }
-
-  public void outACharBasic(ACharBasic node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseACharBasic(ACharBasic node)
-  {
-    inACharBasic(node);
-    if(node.getChar() != null)
-    {
-      node.getChar().apply(this);
+    public void outAStateListTail(AStateListTail node)
+    {
+        defaultOut(node);
     }
-    outACharBasic(node);
-  }
 
-  public void inASetBasic(ASetBasic node)
-  {
-    defaultIn(node);
-  }
-
-  public void outASetBasic(ASetBasic node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseASetBasic(ASetBasic node)
-  {
-    inASetBasic(node);
-    if(node.getSet() != null)
+    @Override
+    public void caseAStateListTail(AStateListTail node)
     {
-      node.getSet().apply(this);
+        inAStateListTail(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getTransition() != null)
+        {
+            node.getTransition().apply(this);
+        }
+        outAStateListTail(node);
     }
-    outASetBasic(node);
-  }
-
-  public void inAStringBasic(AStringBasic node)
-  {
-    defaultIn(node);
-  }
 
-  public void outAStringBasic(AStringBasic node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAStringBasic(AStringBasic node)
-  {
-    inAStringBasic(node);
-    if(node.getString() != null)
+    public void inATransition(ATransition node)
     {
-      node.getString().apply(this);
+        defaultIn(node);
     }
-    outAStringBasic(node);
-  }
 
-  public void inAIdBasic(AIdBasic node)
-  {
-    defaultIn(node);
-  }
+    public void outATransition(ATransition node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAIdBasic(AIdBasic node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseATransition(ATransition node)
+    {
+        inATransition(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outATransition(node);
+    }
 
-  public void caseAIdBasic(AIdBasic node)
-  {
-    inAIdBasic(node);
-    if(node.getId() != null)
+    public void inAIgnTokens(AIgnTokens node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    outAIdBasic(node);
-  }
 
-  public void inARegExpBasic(ARegExpBasic node)
-  {
-    defaultIn(node);
-  }
+    public void outAIgnTokens(AIgnTokens node)
+    {
+        defaultOut(node);
+    }
 
-  public void outARegExpBasic(ARegExpBasic node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAIgnTokens(AIgnTokens node)
+    {
+        inAIgnTokens(node);
+        {
+            List<TId> copy = new ArrayList<TId>(node.getListId());
+            for(TId e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAIgnTokens(node);
+    }
 
-  public void caseARegExpBasic(ARegExpBasic node)
-  {
-    inARegExpBasic(node);
-    if(node.getRegExp() != null)
+    public void inARegExp(ARegExp node)
     {
-      node.getRegExp().apply(this);
+        defaultIn(node);
     }
-    outARegExpBasic(node);
-  }
 
-  public void inACharChar(ACharChar node)
-  {
-    defaultIn(node);
-  }
+    public void outARegExp(ARegExp node)
+    {
+        defaultOut(node);
+    }
 
-  public void outACharChar(ACharChar node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseARegExp(ARegExp node)
+    {
+        inARegExp(node);
+        {
+            List<PConcat> copy = new ArrayList<PConcat>(node.getConcats());
+            for(PConcat e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outARegExp(node);
+    }
 
-  public void caseACharChar(ACharChar node)
-  {
-    inACharChar(node);
-    if(node.getChar() != null)
+    public void inAConcat(AConcat node)
     {
-      node.getChar().apply(this);
+        defaultIn(node);
     }
-    outACharChar(node);
-  }
 
-  public void inADecChar(ADecChar node)
-  {
-    defaultIn(node);
-  }
+    public void outAConcat(AConcat node)
+    {
+        defaultOut(node);
+    }
 
-  public void outADecChar(ADecChar node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAConcat(AConcat node)
+    {
+        inAConcat(node);
+        {
+            List<PUnExp> copy = new ArrayList<PUnExp>(node.getUnExps());
+            for(PUnExp e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAConcat(node);
+    }
 
-  public void caseADecChar(ADecChar node)
-  {
-    inADecChar(node);
-    if(node.getDecChar() != null)
+    public void inAUnExp(AUnExp node)
     {
-      node.getDecChar().apply(this);
+        defaultIn(node);
     }
-    outADecChar(node);
-  }
 
-  public void inAHexChar(AHexChar node)
-  {
-    defaultIn(node);
-  }
+    public void outAUnExp(AUnExp node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAHexChar(AHexChar node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAUnExp(AUnExp node)
+    {
+        inAUnExp(node);
+        if(node.getBasic() != null)
+        {
+            node.getBasic().apply(this);
+        }
+        if(node.getUnOp() != null)
+        {
+            node.getUnOp().apply(this);
+        }
+        outAUnExp(node);
+    }
 
-  public void caseAHexChar(AHexChar node)
-  {
-    inAHexChar(node);
-    if(node.getHexChar() != null)
+    public void inACharBasic(ACharBasic node)
     {
-      node.getHexChar().apply(this);
+        defaultIn(node);
     }
-    outAHexChar(node);
-  }
 
-  public void inAOperationSet(AOperationSet node)
-  {
-    defaultIn(node);
-  }
+    public void outACharBasic(ACharBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAOperationSet(AOperationSet node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseACharBasic(ACharBasic node)
+    {
+        inACharBasic(node);
+        if(node.getChar() != null)
+        {
+            node.getChar().apply(this);
+        }
+        outACharBasic(node);
+    }
 
-  public void caseAOperationSet(AOperationSet node)
-  {
-    inAOperationSet(node);
-    if(node.getLeft() != null)
+    public void inASetBasic(ASetBasic node)
     {
-      node.getLeft().apply(this);
+        defaultIn(node);
     }
-    if(node.getBinOp() != null)
+
+    public void outASetBasic(ASetBasic node)
     {
-      node.getBinOp().apply(this);
+        defaultOut(node);
     }
-    if(node.getRight() != null)
+
+    @Override
+    public void caseASetBasic(ASetBasic node)
     {
-      node.getRight().apply(this);
+        inASetBasic(node);
+        if(node.getSet() != null)
+        {
+            node.getSet().apply(this);
+        }
+        outASetBasic(node);
     }
-    outAOperationSet(node);
-  }
 
-  public void inAIntervalSet(AIntervalSet node)
-  {
-    defaultIn(node);
-  }
+    public void inAStringBasic(AStringBasic node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAIntervalSet(AIntervalSet node)
-  {
-    defaultOut(node);
-  }
+    public void outAStringBasic(AStringBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAIntervalSet(AIntervalSet node)
-  {
-    inAIntervalSet(node);
-    if(node.getLeft() != null)
+    @Override
+    public void caseAStringBasic(AStringBasic node)
     {
-      node.getLeft().apply(this);
+        inAStringBasic(node);
+        if(node.getString() != null)
+        {
+            node.getString().apply(this);
+        }
+        outAStringBasic(node);
     }
-    if(node.getRight() != null)
+
+    public void inAIdBasic(AIdBasic node)
     {
-      node.getRight().apply(this);
+        defaultIn(node);
     }
-    outAIntervalSet(node);
-  }
 
-  public void inAStarUnOp(AStarUnOp node)
-  {
-    defaultIn(node);
-  }
+    public void outAIdBasic(AIdBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAStarUnOp(AStarUnOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAIdBasic(AIdBasic node)
+    {
+        inAIdBasic(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAIdBasic(node);
+    }
 
-  public void caseAStarUnOp(AStarUnOp node)
-  {
-    inAStarUnOp(node);
-    if(node.getStar() != null)
+    public void inARegExpBasic(ARegExpBasic node)
     {
-      node.getStar().apply(this);
+        defaultIn(node);
     }
-    outAStarUnOp(node);
-  }
 
-  public void inAQMarkUnOp(AQMarkUnOp node)
-  {
-    defaultIn(node);
-  }
+    public void outARegExpBasic(ARegExpBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAQMarkUnOp(AQMarkUnOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseARegExpBasic(ARegExpBasic node)
+    {
+        inARegExpBasic(node);
+        if(node.getRegExp() != null)
+        {
+            node.getRegExp().apply(this);
+        }
+        outARegExpBasic(node);
+    }
 
-  public void caseAQMarkUnOp(AQMarkUnOp node)
-  {
-    inAQMarkUnOp(node);
-    if(node.getQMark() != null)
+    public void inACharChar(ACharChar node)
     {
-      node.getQMark().apply(this);
+        defaultIn(node);
     }
-    outAQMarkUnOp(node);
-  }
 
-  public void inAPlusUnOp(APlusUnOp node)
-  {
-    defaultIn(node);
-  }
+    public void outACharChar(ACharChar node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAPlusUnOp(APlusUnOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseACharChar(ACharChar node)
+    {
+        inACharChar(node);
+        if(node.getChar() != null)
+        {
+            node.getChar().apply(this);
+        }
+        outACharChar(node);
+    }
 
-  public void caseAPlusUnOp(APlusUnOp node)
-  {
-    inAPlusUnOp(node);
-    if(node.getPlus() != null)
+    public void inADecChar(ADecChar node)
     {
-      node.getPlus().apply(this);
+        defaultIn(node);
     }
-    outAPlusUnOp(node);
-  }
 
-  public void inAPlusBinOp(APlusBinOp node)
-  {
-    defaultIn(node);
-  }
+    public void outADecChar(ADecChar node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAPlusBinOp(APlusBinOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseADecChar(ADecChar node)
+    {
+        inADecChar(node);
+        if(node.getDecChar() != null)
+        {
+            node.getDecChar().apply(this);
+        }
+        outADecChar(node);
+    }
 
-  public void caseAPlusBinOp(APlusBinOp node)
-  {
-    inAPlusBinOp(node);
-    outAPlusBinOp(node);
-  }
+    public void inAHexChar(AHexChar node)
+    {
+        defaultIn(node);
+    }
 
-  public void inAMinusBinOp(AMinusBinOp node)
-  {
-    defaultIn(node);
-  }
+    public void outAHexChar(AHexChar node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAMinusBinOp(AMinusBinOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAHexChar(AHexChar node)
+    {
+        inAHexChar(node);
+        if(node.getHexChar() != null)
+        {
+            node.getHexChar().apply(this);
+        }
+        outAHexChar(node);
+    }
 
-  public void caseAMinusBinOp(AMinusBinOp node)
-  {
-    inAMinusBinOp(node);
-    outAMinusBinOp(node);
-  }
+    public void inAOperationSet(AOperationSet node)
+    {
+        defaultIn(node);
+    }
 
-  public void inAProductions(AProductions node)
-  {
-    defaultIn(node);
-  }
+    public void outAOperationSet(AOperationSet node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAProductions(AProductions node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAOperationSet(AOperationSet node)
+    {
+        inAOperationSet(node);
+        if(node.getLeft() != null)
+        {
+            node.getLeft().apply(this);
+        }
+        if(node.getBinOp() != null)
+        {
+            node.getBinOp().apply(this);
+        }
+        if(node.getRight() != null)
+        {
+            node.getRight().apply(this);
+        }
+        outAOperationSet(node);
+    }
 
-  public void caseAProductions(AProductions node)
-  {
-    inAProductions(node);
+    public void inAIntervalSet(AIntervalSet node)
     {
-      Object temp[] = node.getProds().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PProd) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outAProductions(node);
-  }
 
-  public void inAProd(AProd node)
-  {
-    defaultIn(node);
-  }
+    public void outAIntervalSet(AIntervalSet node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAProd(AProd node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAIntervalSet(AIntervalSet node)
+    {
+        inAIntervalSet(node);
+        if(node.getLeft() != null)
+        {
+            node.getLeft().apply(this);
+        }
+        if(node.getRight() != null)
+        {
+            node.getRight().apply(this);
+        }
+        outAIntervalSet(node);
+    }
 
-  public void caseAProd(AProd node)
-  {
-    inAProd(node);
-    if(node.getId() != null)
+    public void inAStarUnOp(AStarUnOp node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    if(node.getArrow() != null)
+
+    public void outAStarUnOp(AStarUnOp node)
     {
-      node.getArrow().apply(this);
+        defaultOut(node);
     }
+
+    @Override
+    public void caseAStarUnOp(AStarUnOp node)
     {
-      Object temp[] = node.getProdTransform().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PElem) temp[i]).apply(this);
-      }
+        inAStarUnOp(node);
+        if(node.getStar() != null)
+        {
+            node.getStar().apply(this);
+        }
+        outAStarUnOp(node);
     }
+
+    public void inAQMarkUnOp(AQMarkUnOp node)
     {
-      Object temp[] = node.getAlts().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PAlt) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outAProd(node);
-  }
 
-  public void inAAlt(AAlt node)
-  {
-    defaultIn(node);
-  }
+    public void outAQMarkUnOp(AQMarkUnOp node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAAlt(AAlt node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAQMarkUnOp(AQMarkUnOp node)
+    {
+        inAQMarkUnOp(node);
+        if(node.getQMark() != null)
+        {
+            node.getQMark().apply(this);
+        }
+        outAQMarkUnOp(node);
+    }
 
-  public void caseAAlt(AAlt node)
-  {
-    inAAlt(node);
-    if(node.getAltName() != null)
+    public void inAPlusUnOp(APlusUnOp node)
     {
-      node.getAltName().apply(this);
+        defaultIn(node);
     }
+
+    public void outAPlusUnOp(APlusUnOp node)
     {
-      Object temp[] = node.getElems().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PElem) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    if(node.getAltTransform() != null)
+
+    @Override
+    public void caseAPlusUnOp(APlusUnOp node)
     {
-      node.getAltTransform().apply(this);
+        inAPlusUnOp(node);
+        if(node.getPlus() != null)
+        {
+            node.getPlus().apply(this);
+        }
+        outAPlusUnOp(node);
     }
-    outAAlt(node);
-  }
 
-  public void inAAltTransform(AAltTransform node)
-  {
-    defaultIn(node);
-  }
+    public void inAPlusBinOp(APlusBinOp node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAAltTransform(AAltTransform node)
-  {
-    defaultOut(node);
-  }
+    public void outAPlusBinOp(APlusBinOp node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAAltTransform(AAltTransform node)
-  {
-    inAAltTransform(node);
-    if(node.getLBrace() != null)
+    @Override
+    public void caseAPlusBinOp(APlusBinOp node)
     {
-      node.getLBrace().apply(this);
+        inAPlusBinOp(node);
+        outAPlusBinOp(node);
     }
+
+    public void inAMinusBinOp(AMinusBinOp node)
     {
-      Object temp[] = node.getTerms().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PTerm) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    if(node.getRBrace() != null)
+
+    public void outAMinusBinOp(AMinusBinOp node)
     {
-      node.getRBrace().apply(this);
+        defaultOut(node);
     }
-    outAAltTransform(node);
-  }
 
-  public void inANewTerm(ANewTerm node)
-  {
-    defaultIn(node);
-  }
+    @Override
+    public void caseAMinusBinOp(AMinusBinOp node)
+    {
+        inAMinusBinOp(node);
+        outAMinusBinOp(node);
+    }
 
-  public void outANewTerm(ANewTerm node)
-  {
-    defaultOut(node);
-  }
+    public void inAProductions(AProductions node)
+    {
+        defaultIn(node);
+    }
 
-  public void caseANewTerm(ANewTerm node)
-  {
-    inANewTerm(node);
-    if(node.getProdName() != null)
+    public void outAProductions(AProductions node)
     {
-      node.getProdName().apply(this);
+        defaultOut(node);
     }
-    if(node.getLPar() != null)
+
+    @Override
+    public void caseAProductions(AProductions node)
     {
-      node.getLPar().apply(this);
+        inAProductions(node);
+        {
+            List<PProd> copy = new ArrayList<PProd>(node.getProds());
+            for(PProd e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAProductions(node);
     }
+
+    public void inAProd(AProd node)
     {
-      Object temp[] = node.getParams().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PTerm) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outANewTerm(node);
-  }
 
-  public void inAListTerm(AListTerm node)
-  {
-    defaultIn(node);
-  }
+    public void outAProd(AProd node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAListTerm(AListTerm node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAProd(AProd node)
+    {
+        inAProd(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getArrow() != null)
+        {
+            node.getArrow().apply(this);
+        }
+        {
+            List<PElem> copy = new ArrayList<PElem>(node.getProdTransform());
+            for(PElem e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        {
+            List<PAlt> copy = new ArrayList<PAlt>(node.getAlts());
+            for(PAlt e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAProd(node);
+    }
 
-  public void caseAListTerm(AListTerm node)
-  {
-    inAListTerm(node);
-    if(node.getLBkt() != null)
+    public void inAAlt(AAlt node)
     {
-      node.getLBkt().apply(this);
+        defaultIn(node);
     }
+
+    public void outAAlt(AAlt node)
     {
-      Object temp[] = node.getListTerms().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PListTerm) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    outAListTerm(node);
-  }
 
-  public void inASimpleTerm(ASimpleTerm node)
-  {
-    defaultIn(node);
-  }
+    @Override
+    public void caseAAlt(AAlt node)
+    {
+        inAAlt(node);
+        if(node.getAltName() != null)
+        {
+            node.getAltName().apply(this);
+        }
+        {
+            List<PElem> copy = new ArrayList<PElem>(node.getElems());
+            for(PElem e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getAltTransform() != null)
+        {
+            node.getAltTransform().apply(this);
+        }
+        outAAlt(node);
+    }
 
-  public void outASimpleTerm(ASimpleTerm node)
-  {
-    defaultOut(node);
-  }
+    public void inAAltTransform(AAltTransform node)
+    {
+        defaultIn(node);
+    }
 
-  public void caseASimpleTerm(ASimpleTerm node)
-  {
-    inASimpleTerm(node);
-    if(node.getSpecifier() != null)
+    public void outAAltTransform(AAltTransform node)
     {
-      node.getSpecifier().apply(this);
+        defaultOut(node);
     }
-    if(node.getId() != null)
+
+    @Override
+    public void caseAAltTransform(AAltTransform node)
     {
-      node.getId().apply(this);
+        inAAltTransform(node);
+        if(node.getLBrace() != null)
+        {
+            node.getLBrace().apply(this);
+        }
+        {
+            List<PTerm> copy = new ArrayList<PTerm>(node.getTerms());
+            for(PTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getRBrace() != null)
+        {
+            node.getRBrace().apply(this);
+        }
+        outAAltTransform(node);
     }
-    if(node.getSimpleTermTail() != null)
+
+    public void inANewTerm(ANewTerm node)
     {
-      node.getSimpleTermTail().apply(this);
+        defaultIn(node);
     }
-    outASimpleTerm(node);
-  }
 
-  public void inANullTerm(ANullTerm node)
-  {
-    defaultIn(node);
-  }
+    public void outANewTerm(ANewTerm node)
+    {
+        defaultOut(node);
+    }
 
-  public void outANullTerm(ANullTerm node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseANewTerm(ANewTerm node)
+    {
+        inANewTerm(node);
+        if(node.getProdName() != null)
+        {
+            node.getProdName().apply(this);
+        }
+        if(node.getLPar() != null)
+        {
+            node.getLPar().apply(this);
+        }
+        {
+            List<PTerm> copy = new ArrayList<PTerm>(node.getParams());
+            for(PTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outANewTerm(node);
+    }
 
-  public void caseANullTerm(ANullTerm node)
-  {
-    inANullTerm(node);
-    outANullTerm(node);
-  }
+    public void inAListTerm(AListTerm node)
+    {
+        defaultIn(node);
+    }
 
-  public void inANewListTerm(ANewListTerm node)
-  {
-    defaultIn(node);
-  }
+    public void outAListTerm(AListTerm node)
+    {
+        defaultOut(node);
+    }
 
-  public void outANewListTerm(ANewListTerm node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAListTerm(AListTerm node)
+    {
+        inAListTerm(node);
+        if(node.getLBkt() != null)
+        {
+            node.getLBkt().apply(this);
+        }
+        {
+            List<PListTerm> copy = new ArrayList<PListTerm>(node.getListTerms());
+            for(PListTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAListTerm(node);
+    }
 
-  public void caseANewListTerm(ANewListTerm node)
-  {
-    inANewListTerm(node);
-    if(node.getProdName() != null)
+    public void inASimpleTerm(ASimpleTerm node)
     {
-      node.getProdName().apply(this);
+        defaultIn(node);
     }
-    if(node.getLPar() != null)
+
+    public void outASimpleTerm(ASimpleTerm node)
     {
-      node.getLPar().apply(this);
+        defaultOut(node);
     }
+
+    @Override
+    public void caseASimpleTerm(ASimpleTerm node)
     {
-      Object temp[] = node.getParams().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PTerm) temp[i]).apply(this);
-      }
+        inASimpleTerm(node);
+        if(node.getSpecifier() != null)
+        {
+            node.getSpecifier().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getSimpleTermTail() != null)
+        {
+            node.getSimpleTermTail().apply(this);
+        }
+        outASimpleTerm(node);
     }
-    outANewListTerm(node);
-  }
 
-  public void inASimpleListTerm(ASimpleListTerm node)
-  {
-    defaultIn(node);
-  }
+    public void inANullTerm(ANullTerm node)
+    {
+        defaultIn(node);
+    }
 
-  public void outASimpleListTerm(ASimpleListTerm node)
-  {
-    defaultOut(node);
-  }
+    public void outANullTerm(ANullTerm node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseASimpleListTerm(ASimpleListTerm node)
-  {
-    inASimpleListTerm(node);
-    if(node.getSpecifier() != null)
+    @Override
+    public void caseANullTerm(ANullTerm node)
     {
-      node.getSpecifier().apply(this);
+        inANullTerm(node);
+        outANullTerm(node);
     }
-    if(node.getId() != null)
+
+    public void inANewListTerm(ANewListTerm node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    if(node.getSimpleTermTail() != null)
+
+    public void outANewListTerm(ANewListTerm node)
     {
-      node.getSimpleTermTail().apply(this);
+        defaultOut(node);
     }
-    outASimpleListTerm(node);
-  }
 
-  public void inAProdName(AProdName node)
-  {
-    defaultIn(node);
-  }
+    @Override
+    public void caseANewListTerm(ANewListTerm node)
+    {
+        inANewListTerm(node);
+        if(node.getProdName() != null)
+        {
+            node.getProdName().apply(this);
+        }
+        if(node.getLPar() != null)
+        {
+            node.getLPar().apply(this);
+        }
+        {
+            List<PTerm> copy = new ArrayList<PTerm>(node.getParams());
+            for(PTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outANewListTerm(node);
+    }
 
-  public void outAProdName(AProdName node)
-  {
-    defaultOut(node);
-  }
+    public void inASimpleListTerm(ASimpleListTerm node)
+    {
+        defaultIn(node);
+    }
 
-  public void caseAProdName(AProdName node)
-  {
-    inAProdName(node);
-    if(node.getId() != null)
+    public void outASimpleListTerm(ASimpleListTerm node)
     {
-      node.getId().apply(this);
+        defaultOut(node);
     }
-    if(node.getProdNameTail() != null)
+
+    @Override
+    public void caseASimpleListTerm(ASimpleListTerm node)
     {
-      node.getProdNameTail().apply(this);
+        inASimpleListTerm(node);
+        if(node.getSpecifier() != null)
+        {
+            node.getSpecifier().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getSimpleTermTail() != null)
+        {
+            node.getSimpleTermTail().apply(this);
+        }
+        outASimpleListTerm(node);
     }
-    outAProdName(node);
-  }
 
-  public void inAElem(AElem node)
-  {
-    defaultIn(node);
-  }
+    public void inAProdName(AProdName node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAElem(AElem node)
-  {
-    defaultOut(node);
-  }
+    public void outAProdName(AProdName node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAElem(AElem node)
-  {
-    inAElem(node);
-    if(node.getElemName() != null)
+    @Override
+    public void caseAProdName(AProdName node)
     {
-      node.getElemName().apply(this);
+        inAProdName(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getProdNameTail() != null)
+        {
+            node.getProdNameTail().apply(this);
+        }
+        outAProdName(node);
     }
-    if(node.getSpecifier() != null)
+
+    public void inAElem(AElem node)
     {
-      node.getSpecifier().apply(this);
+        defaultIn(node);
     }
-    if(node.getId() != null)
+
+    public void outAElem(AElem node)
     {
-      node.getId().apply(this);
+        defaultOut(node);
     }
-    if(node.getUnOp() != null)
+
+    @Override
+    public void caseAElem(AElem node)
     {
-      node.getUnOp().apply(this);
+        inAElem(node);
+        if(node.getElemName() != null)
+        {
+            node.getElemName().apply(this);
+        }
+        if(node.getSpecifier() != null)
+        {
+            node.getSpecifier().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getUnOp() != null)
+        {
+            node.getUnOp().apply(this);
+        }
+        outAElem(node);
     }
-    outAElem(node);
-  }
 
-  public void inATokenSpecifier(ATokenSpecifier node)
-  {
-    defaultIn(node);
-  }
+    public void inATokenSpecifier(ATokenSpecifier node)
+    {
+        defaultIn(node);
+    }
 
-  public void outATokenSpecifier(ATokenSpecifier node)
-  {
-    defaultOut(node);
-  }
+    public void outATokenSpecifier(ATokenSpecifier node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseATokenSpecifier(ATokenSpecifier node)
-  {
-    inATokenSpecifier(node);
-    outATokenSpecifier(node);
-  }
+    @Override
+    public void caseATokenSpecifier(ATokenSpecifier node)
+    {
+        inATokenSpecifier(node);
+        outATokenSpecifier(node);
+    }
 
-  public void inAProductionSpecifier(AProductionSpecifier node)
-  {
-    defaultIn(node);
-  }
+    public void inAProductionSpecifier(AProductionSpecifier node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAProductionSpecifier(AProductionSpecifier node)
-  {
-    defaultOut(node);
-  }
+    public void outAProductionSpecifier(AProductionSpecifier node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAProductionSpecifier(AProductionSpecifier node)
-  {
-    inAProductionSpecifier(node);
-    outAProductionSpecifier(node);
-  }
+    @Override
+    public void caseAProductionSpecifier(AProductionSpecifier node)
+    {
+        inAProductionSpecifier(node);
+        outAProductionSpecifier(node);
+    }
 
-  public void inAAst(AAst node)
-  {
-    defaultIn(node);
-  }
+    public void inAAst(AAst node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAAst(AAst node)
-  {
-    defaultOut(node);
-  }
+    public void outAAst(AAst node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAAst(AAst node)
-  {
-    inAAst(node);
+    @Override
+    public void caseAAst(AAst node)
     {
-      Object temp[] = node.getProds().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PAstProd) temp[i]).apply(this);
-      }
+        inAAst(node);
+        {
+            List<PAstProd> copy = new ArrayList<PAstProd>(node.getProds());
+            for(PAstProd e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAAst(node);
     }
-    outAAst(node);
-  }
 
-  public void inAAstProd(AAstProd node)
-  {
-    defaultIn(node);
-  }
+    public void inAAstProd(AAstProd node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAAstProd(AAstProd node)
-  {
-    defaultOut(node);
-  }
+    public void outAAstProd(AAstProd node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAAstProd(AAstProd node)
-  {
-    inAAstProd(node);
-    if(node.getId() != null)
+    @Override
+    public void caseAAstProd(AAstProd node)
     {
-      node.getId().apply(this);
+        inAAstProd(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        {
+            List<PAstAlt> copy = new ArrayList<PAstAlt>(node.getAlts());
+            for(PAstAlt e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAAstProd(node);
     }
+
+    public void inAAstAlt(AAstAlt node)
     {
-      Object temp[] = node.getAlts().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PAstAlt) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outAAstProd(node);
-  }
 
-  public void inAAstAlt(AAstAlt node)
-  {
-    defaultIn(node);
-  }
+    public void outAAstAlt(AAstAlt node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAAstAlt(AAstAlt node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAAstAlt(AAstAlt node)
-  {
-    inAAstAlt(node);
-    if(node.getAltName() != null)
-    {
-      node.getAltName().apply(this);
-    }
-    {
-      Object temp[] = node.getElems().toArray();
-      for(int i = 0; i < temp.length; i++)
-      {
-        ((PElem) temp[i]).apply(this);
-      }
-    }
-    outAAstAlt(node);
-  }
+    @Override
+    public void caseAAstAlt(AAstAlt node)
+    {
+        inAAstAlt(node);
+        if(node.getAltName() != null)
+        {
+            node.getAltName().apply(this);
+        }
+        {
+            List<PElem> copy = new ArrayList<PElem>(node.getElems());
+            for(PElem e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAAstAlt(node);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
index b5401ebbac9e4ef3abd0f5620ef2b2b9c2c42b8e..4c24876f2639b6b75fc124498b0de24953ae1993 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
@@ -2,1128 +2,1201 @@
 
 package org.sablecc.sablecc.analysis;
 
+import java.util.*;
 import org.sablecc.sablecc.node.*;
 
+
 public class ReversedDepthFirstAdapter extends AnalysisAdapter
 {
-  public void inStart(Start node)
-  {
-    defaultIn(node);
-  }
-
-  public void outStart(Start node)
-  {
-    defaultOut(node);
-  }
-
-  public void defaultIn(Node node)
-  {}
-
-  public void defaultOut(Node node)
-  {}
-
-  public void caseStart(Start node)
-  {
-    inStart(node);
-    node.getEOF().apply(this);
-    node.getPGrammar().apply(this);
-    outStart(node);
-  }
-
-  public void inAGrammar(AGrammar node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAGrammar(AGrammar node)
-  {
-    defaultOut(node);
-  }
+    final List<Void> dummy = new ArrayList<Void>();
 
-  public void caseAGrammar(AGrammar node)
-  {
-    inAGrammar(node);
-    if(node.getAst() != null)
+    public void inStart(Start node)
     {
-      node.getAst().apply(this);
+        defaultIn(node);
     }
-    if(node.getProductions() != null)
+
+    public void outStart(Start node)
     {
-      node.getProductions().apply(this);
+        defaultOut(node);
     }
-    if(node.getIgnTokens() != null)
+
+    public void defaultIn(  Node node)
     {
-      node.getIgnTokens().apply(this);
+        // Do nothing
     }
-    if(node.getTokens() != null)
+
+    public void defaultOut(  Node node)
     {
-      node.getTokens().apply(this);
+        // Do nothing
     }
-    if(node.getStates() != null)
+
+    @Override
+    public void caseStart(Start node)
     {
-      node.getStates().apply(this);
+        inStart(node);
+        node.getEOF().apply(this);
+        node.getPGrammar().apply(this);
+        outStart(node);
     }
-    if(node.getHelpers() != null)
+
+    public void inAGrammar(AGrammar node)
     {
-      node.getHelpers().apply(this);
+        defaultIn(node);
     }
+
+    public void outAGrammar(AGrammar node)
     {
-      Object temp[] = node.getPackage().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((TPkgId) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    outAGrammar(node);
-  }
 
-  public void inAHelpers(AHelpers node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAHelpers(AHelpers node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAHelpers(AHelpers node)
-  {
-    inAHelpers(node);
+    @Override
+    public void caseAGrammar(AGrammar node)
     {
-      Object temp[] = node.getHelperDefs().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PHelperDef) temp[i]).apply(this);
-      }
+        inAGrammar(node);
+        if(node.getAst() != null)
+        {
+            node.getAst().apply(this);
+        }
+        if(node.getProductions() != null)
+        {
+            node.getProductions().apply(this);
+        }
+        if(node.getIgnTokens() != null)
+        {
+            node.getIgnTokens().apply(this);
+        }
+        if(node.getTokens() != null)
+        {
+            node.getTokens().apply(this);
+        }
+        if(node.getStates() != null)
+        {
+            node.getStates().apply(this);
+        }
+        if(node.getHelpers() != null)
+        {
+            node.getHelpers().apply(this);
+        }
+        {
+            List<TPkgId> copy = new ArrayList<TPkgId>(node.getPackage());
+            Collections.reverse(copy);
+            for(TPkgId e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAGrammar(node);
     }
-    outAHelpers(node);
-  }
-
-  public void inAHelperDef(AHelperDef node)
-  {
-    defaultIn(node);
-  }
 
-  public void outAHelperDef(AHelperDef node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAHelperDef(AHelperDef node)
-  {
-    inAHelperDef(node);
-    if(node.getRegExp() != null)
+    public void inAHelpers(AHelpers node)
     {
-      node.getRegExp().apply(this);
+        defaultIn(node);
     }
-    if(node.getId() != null)
+
+    public void outAHelpers(AHelpers node)
     {
-      node.getId().apply(this);
+        defaultOut(node);
     }
-    outAHelperDef(node);
-  }
-
-  public void inAStates(AStates node)
-  {
-    defaultIn(node);
-  }
 
-  public void outAStates(AStates node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAStates(AStates node)
-  {
-    inAStates(node);
+    @Override
+    public void caseAHelpers(AHelpers node)
     {
-      Object temp[] = node.getListId().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((TId) temp[i]).apply(this);
-      }
+        inAHelpers(node);
+        {
+            List<PHelperDef> copy = new ArrayList<PHelperDef>(node.getHelperDefs());
+            Collections.reverse(copy);
+            for(PHelperDef e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAHelpers(node);
     }
-    outAStates(node);
-  }
-
-  public void inATokens(ATokens node)
-  {
-    defaultIn(node);
-  }
-
-  public void outATokens(ATokens node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseATokens(ATokens node)
-  {
-    inATokens(node);
+    public void inAHelperDef(AHelperDef node)
     {
-      Object temp[] = node.getTokenDefs().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PTokenDef) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outATokens(node);
-  }
 
-  public void inATokenDef(ATokenDef node)
-  {
-    defaultIn(node);
-  }
-
-  public void outATokenDef(ATokenDef node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseATokenDef(ATokenDef node)
-  {
-    inATokenDef(node);
-    if(node.getLookAhead() != null)
+    public void outAHelperDef(AHelperDef node)
     {
-      node.getLookAhead().apply(this);
+        defaultOut(node);
     }
-    if(node.getSlash() != null)
+
+    @Override
+    public void caseAHelperDef(AHelperDef node)
     {
-      node.getSlash().apply(this);
+        inAHelperDef(node);
+        if(node.getRegExp() != null)
+        {
+            node.getRegExp().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAHelperDef(node);
     }
-    if(node.getRegExp() != null)
+
+    public void inAStates(AStates node)
     {
-      node.getRegExp().apply(this);
+        defaultIn(node);
     }
-    if(node.getId() != null)
+
+    public void outAStates(AStates node)
     {
-      node.getId().apply(this);
+        defaultOut(node);
     }
-    if(node.getStateList() != null)
+
+    @Override
+    public void caseAStates(AStates node)
     {
-      node.getStateList().apply(this);
+        inAStates(node);
+        {
+            List<TId> copy = new ArrayList<TId>(node.getListId());
+            Collections.reverse(copy);
+            for(TId e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAStates(node);
     }
-    outATokenDef(node);
-  }
-
-  public void inAStateList(AStateList node)
-  {
-    defaultIn(node);
-  }
 
-  public void outAStateList(AStateList node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAStateList(AStateList node)
-  {
-    inAStateList(node);
+    public void inATokens(ATokens node)
     {
-      Object temp[] = node.getStateLists().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PStateListTail) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    if(node.getTransition() != null)
+
+    public void outATokens(ATokens node)
     {
-      node.getTransition().apply(this);
+        defaultOut(node);
     }
-    if(node.getId() != null)
+
+    @Override
+    public void caseATokens(ATokens node)
     {
-      node.getId().apply(this);
+        inATokens(node);
+        {
+            List<PTokenDef> copy = new ArrayList<PTokenDef>(node.getTokenDefs());
+            Collections.reverse(copy);
+            for(PTokenDef e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outATokens(node);
     }
-    outAStateList(node);
-  }
 
-  public void inAStateListTail(AStateListTail node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAStateListTail(AStateListTail node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAStateListTail(AStateListTail node)
-  {
-    inAStateListTail(node);
-    if(node.getTransition() != null)
+    public void inATokenDef(ATokenDef node)
     {
-      node.getTransition().apply(this);
+        defaultIn(node);
     }
-    if(node.getId() != null)
+
+    public void outATokenDef(ATokenDef node)
     {
-      node.getId().apply(this);
+        defaultOut(node);
     }
-    outAStateListTail(node);
-  }
 
-  public void inATransition(ATransition node)
-  {
-    defaultIn(node);
-  }
-
-  public void outATransition(ATransition node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseATransition(ATransition node)
-  {
-    inATransition(node);
-    if(node.getId() != null)
+    @Override
+    public void caseATokenDef(ATokenDef node)
     {
-      node.getId().apply(this);
+        inATokenDef(node);
+        if(node.getLookAhead() != null)
+        {
+            node.getLookAhead().apply(this);
+        }
+        if(node.getSlash() != null)
+        {
+            node.getSlash().apply(this);
+        }
+        if(node.getRegExp() != null)
+        {
+            node.getRegExp().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getStateList() != null)
+        {
+            node.getStateList().apply(this);
+        }
+        outATokenDef(node);
     }
-    outATransition(node);
-  }
-
-  public void inAIgnTokens(AIgnTokens node)
-  {
-    defaultIn(node);
-  }
 
-  public void outAIgnTokens(AIgnTokens node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAIgnTokens(AIgnTokens node)
-  {
-    inAIgnTokens(node);
+    public void inAStateList(AStateList node)
     {
-      Object temp[] = node.getListId().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((TId) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outAIgnTokens(node);
-  }
-
-  public void inARegExp(ARegExp node)
-  {
-    defaultIn(node);
-  }
-
-  public void outARegExp(ARegExp node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseARegExp(ARegExp node)
-  {
-    inARegExp(node);
+    public void outAStateList(AStateList node)
     {
-      Object temp[] = node.getConcats().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PConcat) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    outARegExp(node);
-  }
 
-  public void inAConcat(AConcat node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAConcat(AConcat node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAConcat(AConcat node)
-  {
-    inAConcat(node);
+    @Override
+    public void caseAStateList(AStateList node)
     {
-      Object temp[] = node.getUnExps().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PUnExp) temp[i]).apply(this);
-      }
+        inAStateList(node);
+        {
+            List<PStateListTail> copy = new ArrayList<PStateListTail>(node.getStateLists());
+            Collections.reverse(copy);
+            for(PStateListTail e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getTransition() != null)
+        {
+            node.getTransition().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAStateList(node);
     }
-    outAConcat(node);
-  }
-
-  public void inAUnExp(AUnExp node)
-  {
-    defaultIn(node);
-  }
 
-  public void outAUnExp(AUnExp node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAUnExp(AUnExp node)
-  {
-    inAUnExp(node);
-    if(node.getUnOp() != null)
-    {
-      node.getUnOp().apply(this);
-    }
-    if(node.getBasic() != null)
-    {
-      node.getBasic().apply(this);
+    public void inAStateListTail(AStateListTail node)
+    {
+        defaultIn(node);
     }
-    outAUnExp(node);
-  }
 
-  public void inACharBasic(ACharBasic node)
-  {
-    defaultIn(node);
-  }
-
-  public void outACharBasic(ACharBasic node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseACharBasic(ACharBasic node)
-  {
-    inACharBasic(node);
-    if(node.getChar() != null)
-    {
-      node.getChar().apply(this);
+    public void outAStateListTail(AStateListTail node)
+    {
+        defaultOut(node);
     }
-    outACharBasic(node);
-  }
-
-  public void inASetBasic(ASetBasic node)
-  {
-    defaultIn(node);
-  }
 
-  public void outASetBasic(ASetBasic node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseASetBasic(ASetBasic node)
-  {
-    inASetBasic(node);
-    if(node.getSet() != null)
+    @Override
+    public void caseAStateListTail(AStateListTail node)
     {
-      node.getSet().apply(this);
+        inAStateListTail(node);
+        if(node.getTransition() != null)
+        {
+            node.getTransition().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAStateListTail(node);
     }
-    outASetBasic(node);
-  }
-
-  public void inAStringBasic(AStringBasic node)
-  {
-    defaultIn(node);
-  }
-
-  public void outAStringBasic(AStringBasic node)
-  {
-    defaultOut(node);
-  }
 
-  public void caseAStringBasic(AStringBasic node)
-  {
-    inAStringBasic(node);
-    if(node.getString() != null)
+    public void inATransition(ATransition node)
     {
-      node.getString().apply(this);
+        defaultIn(node);
     }
-    outAStringBasic(node);
-  }
 
-  public void inAIdBasic(AIdBasic node)
-  {
-    defaultIn(node);
-  }
+    public void outATransition(ATransition node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAIdBasic(AIdBasic node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseATransition(ATransition node)
+    {
+        inATransition(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outATransition(node);
+    }
 
-  public void caseAIdBasic(AIdBasic node)
-  {
-    inAIdBasic(node);
-    if(node.getId() != null)
+    public void inAIgnTokens(AIgnTokens node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    outAIdBasic(node);
-  }
 
-  public void inARegExpBasic(ARegExpBasic node)
-  {
-    defaultIn(node);
-  }
+    public void outAIgnTokens(AIgnTokens node)
+    {
+        defaultOut(node);
+    }
 
-  public void outARegExpBasic(ARegExpBasic node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAIgnTokens(AIgnTokens node)
+    {
+        inAIgnTokens(node);
+        {
+            List<TId> copy = new ArrayList<TId>(node.getListId());
+            Collections.reverse(copy);
+            for(TId e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAIgnTokens(node);
+    }
 
-  public void caseARegExpBasic(ARegExpBasic node)
-  {
-    inARegExpBasic(node);
-    if(node.getRegExp() != null)
+    public void inARegExp(ARegExp node)
     {
-      node.getRegExp().apply(this);
+        defaultIn(node);
     }
-    outARegExpBasic(node);
-  }
 
-  public void inACharChar(ACharChar node)
-  {
-    defaultIn(node);
-  }
+    public void outARegExp(ARegExp node)
+    {
+        defaultOut(node);
+    }
 
-  public void outACharChar(ACharChar node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseARegExp(ARegExp node)
+    {
+        inARegExp(node);
+        {
+            List<PConcat> copy = new ArrayList<PConcat>(node.getConcats());
+            Collections.reverse(copy);
+            for(PConcat e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outARegExp(node);
+    }
 
-  public void caseACharChar(ACharChar node)
-  {
-    inACharChar(node);
-    if(node.getChar() != null)
+    public void inAConcat(AConcat node)
     {
-      node.getChar().apply(this);
+        defaultIn(node);
     }
-    outACharChar(node);
-  }
 
-  public void inADecChar(ADecChar node)
-  {
-    defaultIn(node);
-  }
+    public void outAConcat(AConcat node)
+    {
+        defaultOut(node);
+    }
 
-  public void outADecChar(ADecChar node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAConcat(AConcat node)
+    {
+        inAConcat(node);
+        {
+            List<PUnExp> copy = new ArrayList<PUnExp>(node.getUnExps());
+            Collections.reverse(copy);
+            for(PUnExp e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAConcat(node);
+    }
 
-  public void caseADecChar(ADecChar node)
-  {
-    inADecChar(node);
-    if(node.getDecChar() != null)
+    public void inAUnExp(AUnExp node)
     {
-      node.getDecChar().apply(this);
+        defaultIn(node);
     }
-    outADecChar(node);
-  }
 
-  public void inAHexChar(AHexChar node)
-  {
-    defaultIn(node);
-  }
+    public void outAUnExp(AUnExp node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAHexChar(AHexChar node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAUnExp(AUnExp node)
+    {
+        inAUnExp(node);
+        if(node.getUnOp() != null)
+        {
+            node.getUnOp().apply(this);
+        }
+        if(node.getBasic() != null)
+        {
+            node.getBasic().apply(this);
+        }
+        outAUnExp(node);
+    }
 
-  public void caseAHexChar(AHexChar node)
-  {
-    inAHexChar(node);
-    if(node.getHexChar() != null)
+    public void inACharBasic(ACharBasic node)
     {
-      node.getHexChar().apply(this);
+        defaultIn(node);
     }
-    outAHexChar(node);
-  }
 
-  public void inAOperationSet(AOperationSet node)
-  {
-    defaultIn(node);
-  }
+    public void outACharBasic(ACharBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAOperationSet(AOperationSet node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseACharBasic(ACharBasic node)
+    {
+        inACharBasic(node);
+        if(node.getChar() != null)
+        {
+            node.getChar().apply(this);
+        }
+        outACharBasic(node);
+    }
 
-  public void caseAOperationSet(AOperationSet node)
-  {
-    inAOperationSet(node);
-    if(node.getRight() != null)
+    public void inASetBasic(ASetBasic node)
     {
-      node.getRight().apply(this);
+        defaultIn(node);
     }
-    if(node.getBinOp() != null)
+
+    public void outASetBasic(ASetBasic node)
     {
-      node.getBinOp().apply(this);
+        defaultOut(node);
     }
-    if(node.getLeft() != null)
+
+    @Override
+    public void caseASetBasic(ASetBasic node)
     {
-      node.getLeft().apply(this);
+        inASetBasic(node);
+        if(node.getSet() != null)
+        {
+            node.getSet().apply(this);
+        }
+        outASetBasic(node);
     }
-    outAOperationSet(node);
-  }
 
-  public void inAIntervalSet(AIntervalSet node)
-  {
-    defaultIn(node);
-  }
+    public void inAStringBasic(AStringBasic node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAIntervalSet(AIntervalSet node)
-  {
-    defaultOut(node);
-  }
+    public void outAStringBasic(AStringBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAIntervalSet(AIntervalSet node)
-  {
-    inAIntervalSet(node);
-    if(node.getRight() != null)
+    @Override
+    public void caseAStringBasic(AStringBasic node)
     {
-      node.getRight().apply(this);
+        inAStringBasic(node);
+        if(node.getString() != null)
+        {
+            node.getString().apply(this);
+        }
+        outAStringBasic(node);
     }
-    if(node.getLeft() != null)
+
+    public void inAIdBasic(AIdBasic node)
     {
-      node.getLeft().apply(this);
+        defaultIn(node);
     }
-    outAIntervalSet(node);
-  }
 
-  public void inAStarUnOp(AStarUnOp node)
-  {
-    defaultIn(node);
-  }
+    public void outAIdBasic(AIdBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAStarUnOp(AStarUnOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAIdBasic(AIdBasic node)
+    {
+        inAIdBasic(node);
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAIdBasic(node);
+    }
 
-  public void caseAStarUnOp(AStarUnOp node)
-  {
-    inAStarUnOp(node);
-    if(node.getStar() != null)
+    public void inARegExpBasic(ARegExpBasic node)
     {
-      node.getStar().apply(this);
+        defaultIn(node);
     }
-    outAStarUnOp(node);
-  }
 
-  public void inAQMarkUnOp(AQMarkUnOp node)
-  {
-    defaultIn(node);
-  }
+    public void outARegExpBasic(ARegExpBasic node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAQMarkUnOp(AQMarkUnOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseARegExpBasic(ARegExpBasic node)
+    {
+        inARegExpBasic(node);
+        if(node.getRegExp() != null)
+        {
+            node.getRegExp().apply(this);
+        }
+        outARegExpBasic(node);
+    }
 
-  public void caseAQMarkUnOp(AQMarkUnOp node)
-  {
-    inAQMarkUnOp(node);
-    if(node.getQMark() != null)
+    public void inACharChar(ACharChar node)
     {
-      node.getQMark().apply(this);
+        defaultIn(node);
     }
-    outAQMarkUnOp(node);
-  }
 
-  public void inAPlusUnOp(APlusUnOp node)
-  {
-    defaultIn(node);
-  }
+    public void outACharChar(ACharChar node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAPlusUnOp(APlusUnOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseACharChar(ACharChar node)
+    {
+        inACharChar(node);
+        if(node.getChar() != null)
+        {
+            node.getChar().apply(this);
+        }
+        outACharChar(node);
+    }
 
-  public void caseAPlusUnOp(APlusUnOp node)
-  {
-    inAPlusUnOp(node);
-    if(node.getPlus() != null)
+    public void inADecChar(ADecChar node)
     {
-      node.getPlus().apply(this);
+        defaultIn(node);
     }
-    outAPlusUnOp(node);
-  }
 
-  public void inAPlusBinOp(APlusBinOp node)
-  {
-    defaultIn(node);
-  }
+    public void outADecChar(ADecChar node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAPlusBinOp(APlusBinOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseADecChar(ADecChar node)
+    {
+        inADecChar(node);
+        if(node.getDecChar() != null)
+        {
+            node.getDecChar().apply(this);
+        }
+        outADecChar(node);
+    }
 
-  public void caseAPlusBinOp(APlusBinOp node)
-  {
-    inAPlusBinOp(node);
-    outAPlusBinOp(node);
-  }
+    public void inAHexChar(AHexChar node)
+    {
+        defaultIn(node);
+    }
 
-  public void inAMinusBinOp(AMinusBinOp node)
-  {
-    defaultIn(node);
-  }
+    public void outAHexChar(AHexChar node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAMinusBinOp(AMinusBinOp node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAHexChar(AHexChar node)
+    {
+        inAHexChar(node);
+        if(node.getHexChar() != null)
+        {
+            node.getHexChar().apply(this);
+        }
+        outAHexChar(node);
+    }
 
-  public void caseAMinusBinOp(AMinusBinOp node)
-  {
-    inAMinusBinOp(node);
-    outAMinusBinOp(node);
-  }
+    public void inAOperationSet(AOperationSet node)
+    {
+        defaultIn(node);
+    }
 
-  public void inAProductions(AProductions node)
-  {
-    defaultIn(node);
-  }
+    public void outAOperationSet(AOperationSet node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAProductions(AProductions node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAOperationSet(AOperationSet node)
+    {
+        inAOperationSet(node);
+        if(node.getRight() != null)
+        {
+            node.getRight().apply(this);
+        }
+        if(node.getBinOp() != null)
+        {
+            node.getBinOp().apply(this);
+        }
+        if(node.getLeft() != null)
+        {
+            node.getLeft().apply(this);
+        }
+        outAOperationSet(node);
+    }
 
-  public void caseAProductions(AProductions node)
-  {
-    inAProductions(node);
+    public void inAIntervalSet(AIntervalSet node)
     {
-      Object temp[] = node.getProds().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PProd) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    outAProductions(node);
-  }
 
-  public void inAProd(AProd node)
-  {
-    defaultIn(node);
-  }
+    public void outAIntervalSet(AIntervalSet node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAProd(AProd node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAIntervalSet(AIntervalSet node)
+    {
+        inAIntervalSet(node);
+        if(node.getRight() != null)
+        {
+            node.getRight().apply(this);
+        }
+        if(node.getLeft() != null)
+        {
+            node.getLeft().apply(this);
+        }
+        outAIntervalSet(node);
+    }
 
-  public void caseAProd(AProd node)
-  {
-    inAProd(node);
+    public void inAStarUnOp(AStarUnOp node)
     {
-      Object temp[] = node.getAlts().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PAlt) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
+
+    public void outAStarUnOp(AStarUnOp node)
     {
-      Object temp[] = node.getProdTransform().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PElem) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    if(node.getArrow() != null)
+
+    @Override
+    public void caseAStarUnOp(AStarUnOp node)
     {
-      node.getArrow().apply(this);
+        inAStarUnOp(node);
+        if(node.getStar() != null)
+        {
+            node.getStar().apply(this);
+        }
+        outAStarUnOp(node);
     }
-    if(node.getId() != null)
+
+    public void inAQMarkUnOp(AQMarkUnOp node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    outAProd(node);
-  }
 
-  public void inAAlt(AAlt node)
-  {
-    defaultIn(node);
-  }
+    public void outAQMarkUnOp(AQMarkUnOp node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAAlt(AAlt node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAQMarkUnOp(AQMarkUnOp node)
+    {
+        inAQMarkUnOp(node);
+        if(node.getQMark() != null)
+        {
+            node.getQMark().apply(this);
+        }
+        outAQMarkUnOp(node);
+    }
 
-  public void caseAAlt(AAlt node)
-  {
-    inAAlt(node);
-    if(node.getAltTransform() != null)
+    public void inAPlusUnOp(APlusUnOp node)
     {
-      node.getAltTransform().apply(this);
+        defaultIn(node);
     }
+
+    public void outAPlusUnOp(APlusUnOp node)
     {
-      Object temp[] = node.getElems().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PElem) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    if(node.getAltName() != null)
+
+    @Override
+    public void caseAPlusUnOp(APlusUnOp node)
     {
-      node.getAltName().apply(this);
+        inAPlusUnOp(node);
+        if(node.getPlus() != null)
+        {
+            node.getPlus().apply(this);
+        }
+        outAPlusUnOp(node);
     }
-    outAAlt(node);
-  }
 
-  public void inAAltTransform(AAltTransform node)
-  {
-    defaultIn(node);
-  }
+    public void inAPlusBinOp(APlusBinOp node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAAltTransform(AAltTransform node)
-  {
-    defaultOut(node);
-  }
+    public void outAPlusBinOp(APlusBinOp node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAAltTransform(AAltTransform node)
-  {
-    inAAltTransform(node);
-    if(node.getRBrace() != null)
+    @Override
+    public void caseAPlusBinOp(APlusBinOp node)
     {
-      node.getRBrace().apply(this);
+        inAPlusBinOp(node);
+        outAPlusBinOp(node);
     }
+
+    public void inAMinusBinOp(AMinusBinOp node)
     {
-      Object temp[] = node.getTerms().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PTerm) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    if(node.getLBrace() != null)
+
+    public void outAMinusBinOp(AMinusBinOp node)
     {
-      node.getLBrace().apply(this);
+        defaultOut(node);
     }
-    outAAltTransform(node);
-  }
 
-  public void inANewTerm(ANewTerm node)
-  {
-    defaultIn(node);
-  }
+    @Override
+    public void caseAMinusBinOp(AMinusBinOp node)
+    {
+        inAMinusBinOp(node);
+        outAMinusBinOp(node);
+    }
 
-  public void outANewTerm(ANewTerm node)
-  {
-    defaultOut(node);
-  }
+    public void inAProductions(AProductions node)
+    {
+        defaultIn(node);
+    }
 
-  public void caseANewTerm(ANewTerm node)
-  {
-    inANewTerm(node);
+    public void outAProductions(AProductions node)
     {
-      Object temp[] = node.getParams().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PTerm) temp[i]).apply(this);
-      }
+        defaultOut(node);
     }
-    if(node.getLPar() != null)
+
+    @Override
+    public void caseAProductions(AProductions node)
     {
-      node.getLPar().apply(this);
+        inAProductions(node);
+        {
+            List<PProd> copy = new ArrayList<PProd>(node.getProds());
+            Collections.reverse(copy);
+            for(PProd e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAProductions(node);
     }
-    if(node.getProdName() != null)
+
+    public void inAProd(AProd node)
     {
-      node.getProdName().apply(this);
+        defaultIn(node);
     }
-    outANewTerm(node);
-  }
 
-  public void inAListTerm(AListTerm node)
-  {
-    defaultIn(node);
-  }
+    public void outAProd(AProd node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAListTerm(AListTerm node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAProd(AProd node)
+    {
+        inAProd(node);
+        {
+            List<PAlt> copy = new ArrayList<PAlt>(node.getAlts());
+            Collections.reverse(copy);
+            for(PAlt e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        {
+            List<PElem> copy = new ArrayList<PElem>(node.getProdTransform());
+            Collections.reverse(copy);
+            for(PElem e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getArrow() != null)
+        {
+            node.getArrow().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAProd(node);
+    }
 
-  public void caseAListTerm(AListTerm node)
-  {
-    inAListTerm(node);
+    public void inAAlt(AAlt node)
     {
-      Object temp[] = node.getListTerms().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PListTerm) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    if(node.getLBkt() != null)
+
+    public void outAAlt(AAlt node)
     {
-      node.getLBkt().apply(this);
+        defaultOut(node);
     }
-    outAListTerm(node);
-  }
 
-  public void inASimpleTerm(ASimpleTerm node)
-  {
-    defaultIn(node);
-  }
+    @Override
+    public void caseAAlt(AAlt node)
+    {
+        inAAlt(node);
+        if(node.getAltTransform() != null)
+        {
+            node.getAltTransform().apply(this);
+        }
+        {
+            List<PElem> copy = new ArrayList<PElem>(node.getElems());
+            Collections.reverse(copy);
+            for(PElem e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getAltName() != null)
+        {
+            node.getAltName().apply(this);
+        }
+        outAAlt(node);
+    }
 
-  public void outASimpleTerm(ASimpleTerm node)
-  {
-    defaultOut(node);
-  }
+    public void inAAltTransform(AAltTransform node)
+    {
+        defaultIn(node);
+    }
 
-  public void caseASimpleTerm(ASimpleTerm node)
-  {
-    inASimpleTerm(node);
-    if(node.getSimpleTermTail() != null)
+    public void outAAltTransform(AAltTransform node)
     {
-      node.getSimpleTermTail().apply(this);
+        defaultOut(node);
     }
-    if(node.getId() != null)
+
+    @Override
+    public void caseAAltTransform(AAltTransform node)
     {
-      node.getId().apply(this);
+        inAAltTransform(node);
+        if(node.getRBrace() != null)
+        {
+            node.getRBrace().apply(this);
+        }
+        {
+            List<PTerm> copy = new ArrayList<PTerm>(node.getTerms());
+            Collections.reverse(copy);
+            for(PTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getLBrace() != null)
+        {
+            node.getLBrace().apply(this);
+        }
+        outAAltTransform(node);
     }
-    if(node.getSpecifier() != null)
+
+    public void inANewTerm(ANewTerm node)
     {
-      node.getSpecifier().apply(this);
+        defaultIn(node);
     }
-    outASimpleTerm(node);
-  }
 
-  public void inANullTerm(ANullTerm node)
-  {
-    defaultIn(node);
-  }
+    public void outANewTerm(ANewTerm node)
+    {
+        defaultOut(node);
+    }
 
-  public void outANullTerm(ANullTerm node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseANewTerm(ANewTerm node)
+    {
+        inANewTerm(node);
+        {
+            List<PTerm> copy = new ArrayList<PTerm>(node.getParams());
+            Collections.reverse(copy);
+            for(PTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getLPar() != null)
+        {
+            node.getLPar().apply(this);
+        }
+        if(node.getProdName() != null)
+        {
+            node.getProdName().apply(this);
+        }
+        outANewTerm(node);
+    }
 
-  public void caseANullTerm(ANullTerm node)
-  {
-    inANullTerm(node);
-    outANullTerm(node);
-  }
+    public void inAListTerm(AListTerm node)
+    {
+        defaultIn(node);
+    }
 
-  public void inANewListTerm(ANewListTerm node)
-  {
-    defaultIn(node);
-  }
+    public void outAListTerm(AListTerm node)
+    {
+        defaultOut(node);
+    }
 
-  public void outANewListTerm(ANewListTerm node)
-  {
-    defaultOut(node);
-  }
+    @Override
+    public void caseAListTerm(AListTerm node)
+    {
+        inAListTerm(node);
+        {
+            List<PListTerm> copy = new ArrayList<PListTerm>(node.getListTerms());
+            Collections.reverse(copy);
+            for(PListTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getLBkt() != null)
+        {
+            node.getLBkt().apply(this);
+        }
+        outAListTerm(node);
+    }
 
-  public void caseANewListTerm(ANewListTerm node)
-  {
-    inANewListTerm(node);
+    public void inASimpleTerm(ASimpleTerm node)
     {
-      Object temp[] = node.getParams().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PTerm) temp[i]).apply(this);
-      }
+        defaultIn(node);
     }
-    if(node.getLPar() != null)
+
+    public void outASimpleTerm(ASimpleTerm node)
     {
-      node.getLPar().apply(this);
+        defaultOut(node);
     }
-    if(node.getProdName() != null)
+
+    @Override
+    public void caseASimpleTerm(ASimpleTerm node)
     {
-      node.getProdName().apply(this);
+        inASimpleTerm(node);
+        if(node.getSimpleTermTail() != null)
+        {
+            node.getSimpleTermTail().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getSpecifier() != null)
+        {
+            node.getSpecifier().apply(this);
+        }
+        outASimpleTerm(node);
     }
-    outANewListTerm(node);
-  }
 
-  public void inASimpleListTerm(ASimpleListTerm node)
-  {
-    defaultIn(node);
-  }
+    public void inANullTerm(ANullTerm node)
+    {
+        defaultIn(node);
+    }
 
-  public void outASimpleListTerm(ASimpleListTerm node)
-  {
-    defaultOut(node);
-  }
+    public void outANullTerm(ANullTerm node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseASimpleListTerm(ASimpleListTerm node)
-  {
-    inASimpleListTerm(node);
-    if(node.getSimpleTermTail() != null)
+    @Override
+    public void caseANullTerm(ANullTerm node)
     {
-      node.getSimpleTermTail().apply(this);
+        inANullTerm(node);
+        outANullTerm(node);
     }
-    if(node.getId() != null)
+
+    public void inANewListTerm(ANewListTerm node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    if(node.getSpecifier() != null)
+
+    public void outANewListTerm(ANewListTerm node)
     {
-      node.getSpecifier().apply(this);
+        defaultOut(node);
     }
-    outASimpleListTerm(node);
-  }
 
-  public void inAProdName(AProdName node)
-  {
-    defaultIn(node);
-  }
+    @Override
+    public void caseANewListTerm(ANewListTerm node)
+    {
+        inANewListTerm(node);
+        {
+            List<PTerm> copy = new ArrayList<PTerm>(node.getParams());
+            Collections.reverse(copy);
+            for(PTerm e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getLPar() != null)
+        {
+            node.getLPar().apply(this);
+        }
+        if(node.getProdName() != null)
+        {
+            node.getProdName().apply(this);
+        }
+        outANewListTerm(node);
+    }
 
-  public void outAProdName(AProdName node)
-  {
-    defaultOut(node);
-  }
+    public void inASimpleListTerm(ASimpleListTerm node)
+    {
+        defaultIn(node);
+    }
 
-  public void caseAProdName(AProdName node)
-  {
-    inAProdName(node);
-    if(node.getProdNameTail() != null)
+    public void outASimpleListTerm(ASimpleListTerm node)
     {
-      node.getProdNameTail().apply(this);
+        defaultOut(node);
     }
-    if(node.getId() != null)
+
+    @Override
+    public void caseASimpleListTerm(ASimpleListTerm node)
     {
-      node.getId().apply(this);
+        inASimpleListTerm(node);
+        if(node.getSimpleTermTail() != null)
+        {
+            node.getSimpleTermTail().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getSpecifier() != null)
+        {
+            node.getSpecifier().apply(this);
+        }
+        outASimpleListTerm(node);
     }
-    outAProdName(node);
-  }
 
-  public void inAElem(AElem node)
-  {
-    defaultIn(node);
-  }
+    public void inAProdName(AProdName node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAElem(AElem node)
-  {
-    defaultOut(node);
-  }
+    public void outAProdName(AProdName node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAElem(AElem node)
-  {
-    inAElem(node);
-    if(node.getUnOp() != null)
+    @Override
+    public void caseAProdName(AProdName node)
     {
-      node.getUnOp().apply(this);
+        inAProdName(node);
+        if(node.getProdNameTail() != null)
+        {
+            node.getProdNameTail().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAProdName(node);
     }
-    if(node.getId() != null)
+
+    public void inAElem(AElem node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    if(node.getSpecifier() != null)
+
+    public void outAElem(AElem node)
     {
-      node.getSpecifier().apply(this);
+        defaultOut(node);
     }
-    if(node.getElemName() != null)
+
+    @Override
+    public void caseAElem(AElem node)
     {
-      node.getElemName().apply(this);
+        inAElem(node);
+        if(node.getUnOp() != null)
+        {
+            node.getUnOp().apply(this);
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        if(node.getSpecifier() != null)
+        {
+            node.getSpecifier().apply(this);
+        }
+        if(node.getElemName() != null)
+        {
+            node.getElemName().apply(this);
+        }
+        outAElem(node);
     }
-    outAElem(node);
-  }
 
-  public void inATokenSpecifier(ATokenSpecifier node)
-  {
-    defaultIn(node);
-  }
+    public void inATokenSpecifier(ATokenSpecifier node)
+    {
+        defaultIn(node);
+    }
 
-  public void outATokenSpecifier(ATokenSpecifier node)
-  {
-    defaultOut(node);
-  }
+    public void outATokenSpecifier(ATokenSpecifier node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseATokenSpecifier(ATokenSpecifier node)
-  {
-    inATokenSpecifier(node);
-    outATokenSpecifier(node);
-  }
+    @Override
+    public void caseATokenSpecifier(ATokenSpecifier node)
+    {
+        inATokenSpecifier(node);
+        outATokenSpecifier(node);
+    }
 
-  public void inAProductionSpecifier(AProductionSpecifier node)
-  {
-    defaultIn(node);
-  }
+    public void inAProductionSpecifier(AProductionSpecifier node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAProductionSpecifier(AProductionSpecifier node)
-  {
-    defaultOut(node);
-  }
+    public void outAProductionSpecifier(AProductionSpecifier node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAProductionSpecifier(AProductionSpecifier node)
-  {
-    inAProductionSpecifier(node);
-    outAProductionSpecifier(node);
-  }
+    @Override
+    public void caseAProductionSpecifier(AProductionSpecifier node)
+    {
+        inAProductionSpecifier(node);
+        outAProductionSpecifier(node);
+    }
 
-  public void inAAst(AAst node)
-  {
-    defaultIn(node);
-  }
+    public void inAAst(AAst node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAAst(AAst node)
-  {
-    defaultOut(node);
-  }
+    public void outAAst(AAst node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAAst(AAst node)
-  {
-    inAAst(node);
+    @Override
+    public void caseAAst(AAst node)
     {
-      Object temp[] = node.getProds().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PAstProd) temp[i]).apply(this);
-      }
+        inAAst(node);
+        {
+            List<PAstProd> copy = new ArrayList<PAstProd>(node.getProds());
+            Collections.reverse(copy);
+            for(PAstProd e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        outAAst(node);
     }
-    outAAst(node);
-  }
 
-  public void inAAstProd(AAstProd node)
-  {
-    defaultIn(node);
-  }
+    public void inAAstProd(AAstProd node)
+    {
+        defaultIn(node);
+    }
 
-  public void outAAstProd(AAstProd node)
-  {
-    defaultOut(node);
-  }
+    public void outAAstProd(AAstProd node)
+    {
+        defaultOut(node);
+    }
 
-  public void caseAAstProd(AAstProd node)
-  {
-    inAAstProd(node);
+    @Override
+    public void caseAAstProd(AAstProd node)
     {
-      Object temp[] = node.getAlts().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PAstAlt) temp[i]).apply(this);
-      }
+        inAAstProd(node);
+        {
+            List<PAstAlt> copy = new ArrayList<PAstAlt>(node.getAlts());
+            Collections.reverse(copy);
+            for(PAstAlt e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getId() != null)
+        {
+            node.getId().apply(this);
+        }
+        outAAstProd(node);
     }
-    if(node.getId() != null)
+
+    public void inAAstAlt(AAstAlt node)
     {
-      node.getId().apply(this);
+        defaultIn(node);
     }
-    outAAstProd(node);
-  }
 
-  public void inAAstAlt(AAstAlt node)
-  {
-    defaultIn(node);
-  }
+    public void outAAstAlt(AAstAlt node)
+    {
+        defaultOut(node);
+    }
 
-  public void outAAstAlt(AAstAlt node)
-  {
-    defaultOut(node);
-  }
-
-  public void caseAAstAlt(AAstAlt node)
-  {
-    inAAstAlt(node);
-    {
-      Object temp[] = node.getElems().toArray();
-      for(int i = temp.length - 1; i >= 0; i--)
-      {
-        ((PElem) temp[i]).apply(this);
-      }
-    }
-    if(node.getAltName() != null)
-    {
-      node.getAltName().apply(this);
-    }
-    outAAstAlt(node);
-  }
+    @Override
+    public void caseAAstAlt(AAstAlt node)
+    {
+        inAAstAlt(node);
+        {
+            List<PElem> copy = new ArrayList<PElem>(node.getElems());
+            Collections.reverse(copy);
+            for(PElem e : copy)
+            {
+                e.apply(this);
+            }
+        }
+        if(node.getAltName() != null)
+        {
+            node.getAltName().apply(this);
+        }
+        outAAstAlt(node);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
index cb7c7bb4720cf9a0c3922ffdc60f8ba7193c403d..524077b392a026c2b5806e7f5f11361cda900cab 100644
--- a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
+++ b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
@@ -5,1149 +5,1060 @@ package org.sablecc.sablecc.lexer;
 import java.io.*;
 import java.util.*;
 import org.sablecc.sablecc.node.*;
+import de.hhu.stups.sablecc.patch.*;
+import java.util.concurrent.LinkedBlockingQueue;
 
-public class Lexer
+@SuppressWarnings({"unused"})
+public class Lexer implements ITokenListContainer
 {
-  protected Token token;
-  protected State state = State.NORMAL;
+    protected Token token;
+    protected State state = State.NORMAL;
 
-  private PushbackReader in;
-  private int line;
-  private int pos;
-  private boolean cr;
-  private boolean eof;
-  private final StringBuffer text = new StringBuffer();
+    private PushbackReader in;
+    protected int line;
+    protected int pos;
+    private boolean cr;
+    private boolean eof;
+    private final StringBuffer text = new StringBuffer();
 
-  protected void filter() throws LexerException, IOException
-    {}
+    private List<IToken> tokenList;
+    private final Queue<IToken> nextList = new LinkedBlockingQueue<IToken>();
 
-  public Lexer(PushbackReader in)
-  {
-    this.in = in;
-  }
+    private IToken tok;
 
-  public Token peek() throws LexerException, IOException
-  {
-    while(token == null)
-    {
-      token = getToken();
-      filter();
+    public Queue<IToken> getNextList() {
+        return nextList;
     }
 
-    return token;
-  }
+    public List<IToken> getTokenList() {
+        return tokenList;
+    }
 
-  public Token next() throws LexerException, IOException
-  {
-    while(token == null)
-    {
-      token = getToken();
-      filter();
+    private void setToken(Token t) {
+        tok = t;
+        token = t;
     }
 
-    Token result = token;
-    token = null;
-    return result;
-  }
 
-  protected Token getToken() throws IOException, LexerException
-  {
-    int dfa_state = 0;
+    public void setTokenList(final List<IToken> list) {
+        tokenList = list;
+    }
+
 
-    int start_pos = pos;
-    int start_line = line;
+    protected void filter() throws LexerException, IOException
+    {
+        // Do nothing
+    }
 
-    int accept_state = -1;
-    int accept_token = -1;
-    int accept_length = -1;
-    int accept_pos = -1;
-    int accept_line = -1;
+    protected void filterWrap() throws LexerException, IOException
+    {
+        filter();
+        if (token != null) {
+            getTokenList().add(token);
+            nextList.add(token);
+        }
+    }
 
-    int[][][] gotoTable = this.gotoTable[state.id()];
-    int[] accept = this.accept[state.id()];
-    text.setLength(0);
 
-    while(true)
+    public Lexer(  PushbackReader in)
     {
-      int c = getChar();
+        this.in = in;
+        setTokenList(new ArrayList<IToken>());
+    }
 
-      if(c != -1)
-      {
-        switch(c)
+    public Token peek() throws LexerException, IOException
+    {
+        while(this.token == null)
         {
-        case 10:
-          if(cr)
-          {
-            cr = false;
-          }
-          else
-          {
-            line++;
-            pos = 0;
-          }
-          break;
-        case 13:
-        case 8232: // Unicode line separator
-        case 8233: // Unicode paragraph separator
-          line++;
-          pos = 0;
-          cr = true;
-          break;
-        default:
-          pos++;
-          cr = false;
-          break;
-        };
+            this.setToken(getToken());
+            filterWrap();
+        }
 
-        text.append((char) c);
+        return (Token) nextList.peek();
+    }
 
-        do
+    public Token next() throws LexerException, IOException
+    {
+        while(this.token == null)
         {
-          int oldState = (dfa_state < -1) ? (-2 -dfa_state) : dfa_state;
+            this.setToken(getToken());
+            filterWrap();
+        }
 
-          dfa_state = -1;
+        Token result = (Token) nextList.poll();
+        this.setToken(null);
+        return result;
+    }
 
-          int[][] tmp1 =  gotoTable[oldState];
-          int low = 0;
-          int high = tmp1.length - 1;
+    protected Token getToken() throws IOException, LexerException
+    {
+        int dfa_state = 0;
 
-          while(low <= high)
-          {
-            int middle = (low + high) / 2;
-            int[] tmp2 = tmp1[middle];
+        int start_pos = this.pos;
+        int start_line = this.line;
 
-            if(c < tmp2[0])
-            {
-              high = middle - 1;
-            }
-            else if(c > tmp2[1])
-            {
-              low = middle + 1;
-            }
-            else
-            {
-              dfa_state = tmp2[2];
-              break;
-            }
-          }
-        }
-        while(dfa_state < -1);
-      }
-      else
-      {
-        dfa_state = -1;
-      }
+        int accept_state = -1;
+        int accept_token = -1;
+        int accept_length = -1;
+        int accept_pos = -1;
+        int accept_line = -1;
 
-      if(dfa_state >= 0)
-      {
-        if(accept[dfa_state] != -1)
-        {
-          accept_state = dfa_state;
-          accept_token = accept[dfa_state];
-          accept_length = text.length();
-          accept_pos = pos;
-          accept_line = line;
-        }
-      }
-      else
-      {
-        if(accept_state != -1)
+        int[][][] gotoTable = Lexer.gotoTable[this.state.id()];
+        int[] accept = Lexer.accept[this.state.id()];
+        this.text.setLength(0);
+
+        while(true)
         {
-          switch(accept_token)
-          {
-          case 0:
-            {
-              Token token = new0(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              switch(state.id())
-              {
-              case 1:
-                state = State.PACKAGE;
-                break;
-              }
-              return token;
-            }
-          case 1:
-            {
-              Token token = new1(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              switch(state.id())
-              {
-              case 0:
-                state = State.PACKAGE;
-                break;
-              }
-              return token;
-            }
-          case 2:
-            {
-              Token token = new2(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 3:
-            {
-              Token token = new3(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 4:
-            {
-              Token token = new4(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 5:
-            {
-              Token token = new5(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 6:
-            {
-              Token token = new6(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 7:
-            {
-              Token token = new7(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 8:
-            {
-              Token token = new8(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 9:
-            {
-              Token token = new9(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 10:
-            {
-              Token token = new10(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 11:
-            {
-              Token token = new11(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 12:
-            {
-              Token token = new12(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 13:
-            {
-              Token token = new13(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 14:
-            {
-              Token token = new14(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 15:
-            {
-              Token token = new15(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 16:
-            {
-              Token token = new16(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              switch(state.id())
-              {
-              case 0:
-                state = State.NORMAL;
-                break;
-              case 1:
-                state = State.NORMAL;
-                break;
-              }
-              return token;
-            }
-          case 17:
-            {
-              Token token = new17(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 18:
-            {
-              Token token = new18(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 19:
-            {
-              Token token = new19(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 20:
-            {
-              Token token = new20(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 21:
-            {
-              Token token = new21(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 22:
-            {
-              Token token = new22(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 23:
-            {
-              Token token = new23(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 24:
-            {
-              Token token = new24(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 25:
-            {
-              Token token = new25(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 26:
-            {
-              Token token = new26(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 27:
-            {
-              Token token = new27(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 28:
-            {
-              Token token = new28(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 29:
-            {
-              Token token = new29(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 30:
-            {
-              Token token = new30(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 31:
-            {
-              Token token = new31(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 32:
-            {
-              Token token = new32(
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 33:
-            {
-              Token token = new33(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 34:
-            {
-              Token token = new34(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 35:
-            {
-              Token token = new35(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
-            }
-          case 36:
+            int c = getChar();
+
+            if(c != -1)
             {
-              Token token = new36(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
+                switch(c)
+                {
+                case 10:
+                    if(this.cr)
+                    {
+                        this.cr = false;
+                    }
+                    else
+                    {
+                        this.line++;
+                        this.pos = 0;
+                    }
+                    break;
+                case 13:
+                case 8232: // Unicode line separator
+                case 8233: // Unicode paragraph separator
+                    this.line++;
+                    this.pos = 0;
+                    this.cr = true;
+                    break;
+                default:
+                    this.pos++;
+                    this.cr = false;
+                    break;
+                }
+
+                this.text.append((char) c);
+
+                do
+                {
+                    int oldState = (dfa_state < -1) ? (-2 -dfa_state) : dfa_state;
+
+                    dfa_state = -1;
+
+                    int[][] tmp1 =  gotoTable[oldState];
+                    int low = 0;
+                    int high = tmp1.length - 1;
+
+                    // find next DFA state depending on character c
+                    // an entry {Low, Up, Id} -> means if Low <= c <= Up -> goto state Id
+                    while(low <= high)
+                    {
+                        int middle = (low + high) >>> 1;
+                        int[] tmp2 = tmp1[middle];
+
+                        if(c < tmp2[0])
+                        {
+                            high = middle - 1;
+                        }
+                        else if(c > tmp2[1])
+                        {
+                            low = middle + 1;
+                        }
+                        else
+                        {
+                            dfa_state = tmp2[2];
+                            break;
+                        }
+                    }
+                } while(dfa_state < -1);
             }
-          case 37:
+            else
             {
-              Token token = new37(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
+                dfa_state = -1;
             }
-          case 38:
+
+            if(dfa_state >= 0)
             {
-              Token token = new38(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
+                if(accept[dfa_state] != -1)
+                {
+                    accept_state = dfa_state;
+                    accept_token = accept[dfa_state];
+                    accept_length = this.text.length();
+                    accept_pos = this.pos;
+                    accept_line = this.line;
+                }
             }
-          case 39:
+            else
             {
-              Token token = new39(
-                              getText(accept_length),
-                              start_line + 1,
-                              start_pos + 1);
-              pushBack(accept_length);
-              pos = accept_pos;
-              line = accept_line;
-              return token;
+                if(accept_state != -1)
+                {
+                    switch(accept_token)
+                    {
+                    case 0:
+                        {
+                              Token token = new0(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            switch(state.id())
+                            {
+                                case 1: state = State.PACKAGE; break;
+                            }
+                            return token;
+                        }
+                    case 1:
+                        {
+                              Token token = new1(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            switch(state.id())
+                            {
+                                case 0: state = State.PACKAGE; break;
+                            }
+                            return token;
+                        }
+                    case 2:
+                        {
+                              Token token = new2(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 3:
+                        {
+                              Token token = new3(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 4:
+                        {
+                              Token token = new4(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 5:
+                        {
+                              Token token = new5(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 6:
+                        {
+                              Token token = new6(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 7:
+                        {
+                              Token token = new7(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 8:
+                        {
+                              Token token = new8(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 9:
+                        {
+                              Token token = new9(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 10:
+                        {
+                              Token token = new10(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 11:
+                        {
+                              Token token = new11(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 12:
+                        {
+                              Token token = new12(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 13:
+                        {
+                              Token token = new13(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 14:
+                        {
+                              Token token = new14(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 15:
+                        {
+                              Token token = new15(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 16:
+                        {
+                              Token token = new16(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            switch(state.id())
+                            {
+                                case 0: state = State.NORMAL; break;
+                                case 1: state = State.NORMAL; break;
+                            }
+                            return token;
+                        }
+                    case 17:
+                        {
+                              Token token = new17(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 18:
+                        {
+                              Token token = new18(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 19:
+                        {
+                              Token token = new19(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 20:
+                        {
+                              Token token = new20(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 21:
+                        {
+                              Token token = new21(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 22:
+                        {
+                              Token token = new22(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 23:
+                        {
+                              Token token = new23(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 24:
+                        {
+                              Token token = new24(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 25:
+                        {
+                              Token token = new25(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 26:
+                        {
+                              Token token = new26(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 27:
+                        {
+                              Token token = new27(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 28:
+                        {
+                              Token token = new28(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 29:
+                        {
+                              Token token = new29(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 30:
+                        {
+                              Token token = new30(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 31:
+                        {
+                              Token token = new31(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 32:
+                        {
+                              Token token = new32(
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 33:
+                        {
+                              Token token = new33(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 34:
+                        {
+                              Token token = new34(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 35:
+                        {
+                              Token token = new35(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 36:
+                        {
+                              Token token = new36(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 37:
+                        {
+                              Token token = new37(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 38:
+                        {
+                              Token token = new38(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    case 39:
+                        {
+                              Token token = new39(
+                                getText(accept_length),
+                                start_line + 1,
+                                start_pos + 1);
+                            pushBack(accept_length);
+                            this.pos = accept_pos;
+                            this.line = accept_line;
+                            return token;
+                        }
+                    }
+                }
+                else
+                {
+                    if(this.text.length() > 0)
+                    {
+                        throw new LexerException(
+                            "[" + (start_line + 1) + "," + (start_pos + 1) + "]" +
+                            " Unknown token: " + this.text);
+                    }
+
+                      EOF token = new EOF(
+                        start_line + 1,
+                        start_pos + 1);
+                    return token;
+                }
             }
-          }
-        }
-        else
-        {
-          if(text.length() > 0)
-          {
-            throw new LexerException(
-              "[" + (start_line + 1) + "," + (start_pos + 1) + "]" +
-              " Unknown token: " + text);
-          }
-          else
-          {
-            EOF token = new EOF(
-                          start_line + 1,
-                          start_pos + 1);
-            return token;
-          }
         }
-      }
     }
-  }
 
-  Token new0(String text, int line, int pos)
-  {
-    return new TPkgId(text, line, pos);
-  }
-  Token new1(int line, int pos)
-  {
-    return new TPackage(line, pos);
-  }
-  Token new2(int line, int pos)
-  {
-    return new TStates(line, pos);
-  }
-  Token new3(int line, int pos)
-  {
-    return new THelpers(line, pos);
-  }
-  Token new4(int line, int pos)
-  {
-    return new TTokens(line, pos);
-  }
-  Token new5(int line, int pos)
-  {
-    return new TIgnored(line, pos);
-  }
-  Token new6(int line, int pos)
-  {
-    return new TProductions(line, pos);
-  }
-  Token new7(int line, int pos)
-  {
-    return new TAbstract(line, pos);
-  }
-  Token new8(int line, int pos)
-  {
-    return new TSyntax(line, pos);
-  }
-  Token new9(int line, int pos)
-  {
-    return new TTree(line, pos);
-  }
-  Token new10(int line, int pos)
-  {
-    return new TNew(line, pos);
-  }
-  Token new11(int line, int pos)
-  {
-    return new TNull(line, pos);
-  }
-  Token new12(int line, int pos)
-  {
-    return new TTokenSpecifier(line, pos);
-  }
-  Token new13(int line, int pos)
-  {
-    return new TProductionSpecifier(line, pos);
-  }
-  Token new14(int line, int pos)
-  {
-    return new TDot(line, pos);
-  }
-  Token new15(int line, int pos)
-  {
-    return new TDDot(line, pos);
-  }
-  Token new16(int line, int pos)
-  {
-    return new TSemicolon(line, pos);
-  }
-  Token new17(int line, int pos)
-  {
-    return new TEqual(line, pos);
-  }
-  Token new18(int line, int pos)
-  {
-    return new TLBkt(line, pos);
-  }
-  Token new19(int line, int pos)
-  {
-    return new TRBkt(line, pos);
-  }
-  Token new20(int line, int pos)
-  {
-    return new TLPar(line, pos);
-  }
-  Token new21(int line, int pos)
-  {
-    return new TRPar(line, pos);
-  }
-  Token new22(int line, int pos)
-  {
-    return new TLBrace(line, pos);
-  }
-  Token new23(int line, int pos)
-  {
-    return new TRBrace(line, pos);
-  }
-  Token new24(int line, int pos)
-  {
-    return new TPlus(line, pos);
-  }
-  Token new25(int line, int pos)
-  {
-    return new TMinus(line, pos);
-  }
-  Token new26(int line, int pos)
-  {
-    return new TQMark(line, pos);
-  }
-  Token new27(int line, int pos)
-  {
-    return new TStar(line, pos);
-  }
-  Token new28(int line, int pos)
-  {
-    return new TBar(line, pos);
-  }
-  Token new29(int line, int pos)
-  {
-    return new TComma(line, pos);
-  }
-  Token new30(int line, int pos)
-  {
-    return new TSlash(line, pos);
-  }
-  Token new31(int line, int pos)
-  {
-    return new TArrow(line, pos);
-  }
-  Token new32(int line, int pos)
-  {
-    return new TColon(line, pos);
-  }
-  Token new33(String text, int line, int pos)
-  {
-    return new TId(text, line, pos);
-  }
-  Token new34(String text, int line, int pos)
-  {
-    return new TChar(text, line, pos);
-  }
-  Token new35(String text, int line, int pos)
-  {
-    return new TDecChar(text, line, pos);
-  }
-  Token new36(String text, int line, int pos)
-  {
-    return new THexChar(text, line, pos);
-  }
-  Token new37(String text, int line, int pos)
-  {
-    return new TString(text, line, pos);
-  }
-  Token new38(String text, int line, int pos)
-  {
-    return new TBlank(text, line, pos);
-  }
-  Token new39(String text, int line, int pos)
-  {
-    return new TComment(text, line, pos);
-  }
+    Token new0(  String text,   int line,   int pos) { return new TPkgId(text, line, pos); }
+    Token new1(  int line,   int pos) { return new TPackage(line, pos); }
+    Token new2(  int line,   int pos) { return new TStates(line, pos); }
+    Token new3(  int line,   int pos) { return new THelpers(line, pos); }
+    Token new4(  int line,   int pos) { return new TTokens(line, pos); }
+    Token new5(  int line,   int pos) { return new TIgnored(line, pos); }
+    Token new6(  int line,   int pos) { return new TProductions(line, pos); }
+    Token new7(  int line,   int pos) { return new TAbstract(line, pos); }
+    Token new8(  int line,   int pos) { return new TSyntax(line, pos); }
+    Token new9(  int line,   int pos) { return new TTree(line, pos); }
+    Token new10(  int line,   int pos) { return new TNew(line, pos); }
+    Token new11(  int line,   int pos) { return new TNull(line, pos); }
+    Token new12(  int line,   int pos) { return new TTokenSpecifier(line, pos); }
+    Token new13(  int line,   int pos) { return new TProductionSpecifier(line, pos); }
+    Token new14(  int line,   int pos) { return new TDot(line, pos); }
+    Token new15(  int line,   int pos) { return new TDDot(line, pos); }
+    Token new16(  int line,   int pos) { return new TSemicolon(line, pos); }
+    Token new17(  int line,   int pos) { return new TEqual(line, pos); }
+    Token new18(  int line,   int pos) { return new TLBkt(line, pos); }
+    Token new19(  int line,   int pos) { return new TRBkt(line, pos); }
+    Token new20(  int line,   int pos) { return new TLPar(line, pos); }
+    Token new21(  int line,   int pos) { return new TRPar(line, pos); }
+    Token new22(  int line,   int pos) { return new TLBrace(line, pos); }
+    Token new23(  int line,   int pos) { return new TRBrace(line, pos); }
+    Token new24(  int line,   int pos) { return new TPlus(line, pos); }
+    Token new25(  int line,   int pos) { return new TMinus(line, pos); }
+    Token new26(  int line,   int pos) { return new TQMark(line, pos); }
+    Token new27(  int line,   int pos) { return new TStar(line, pos); }
+    Token new28(  int line,   int pos) { return new TBar(line, pos); }
+    Token new29(  int line,   int pos) { return new TComma(line, pos); }
+    Token new30(  int line,   int pos) { return new TSlash(line, pos); }
+    Token new31(  int line,   int pos) { return new TArrow(line, pos); }
+    Token new32(  int line,   int pos) { return new TColon(line, pos); }
+    Token new33(  String text,   int line,   int pos) { return new TId(text, line, pos); }
+    Token new34(  String text,   int line,   int pos) { return new TChar(text, line, pos); }
+    Token new35(  String text,   int line,   int pos) { return new TDecChar(text, line, pos); }
+    Token new36(  String text,   int line,   int pos) { return new THexChar(text, line, pos); }
+    Token new37(  String text,   int line,   int pos) { return new TString(text, line, pos); }
+    Token new38(  String text,   int line,   int pos) { return new TBlank(text, line, pos); }
+    Token new39(  String text,   int line,   int pos) { return new TComment(text, line, pos); }
 
-  private int getChar() throws IOException
-  {
-    if(eof)
+    private int getChar() throws IOException
     {
-      return -1;
-    }
+        if(this.eof)
+        {
+            return -1;
+        }
 
-    int result = in.read();
+        int result = this.in.read();
 
-    if(result == -1)
-    {
-      eof = true;
-    }
+        if(result == -1)
+        {
+            this.eof = true;
+        }
 
-    return result;
-  }
+        return result;
+    }
 
-  private void pushBack(int acceptLength) throws IOException
-  {
-    int length = text.length();
-    for(int i = length - 1; i >= acceptLength; i--)
+    private void pushBack(int acceptLength) throws IOException
     {
-      eof = false;
+        int length = this.text.length();
+        for(int i = length - 1; i >= acceptLength; i--)
+        {
+            this.eof = false;
 
-      in.unread(text.charAt(i));
+            this.in.unread(this.text.charAt(i));
+        }
     }
-  }
-
-  protected void unread(Token token) throws IOException
-  {
-    String text = token.getText();
-    int length = text.length();
 
-    for(int i = length - 1; i >= 0; i--)
+    protected void unread(  Token token) throws IOException
     {
-      eof = false;
+          String text = token.getText();
+        int length = text.length();
 
-      in.unread(text.charAt(i));
-    }
+        for(int i = length - 1; i >= 0; i--)
+        {
+            this.eof = false;
 
-    pos = token.getPos() - 1;
-    line = token.getLine() - 1;
-  }
+            this.in.unread(text.charAt(i));
+        }
 
-  private String getText(int acceptLength)
-  {
-    StringBuffer s = new StringBuffer(acceptLength);
-    for(int i = 0; i < acceptLength; i++)
-    {
-      s.append(text.charAt(i));
+        this.pos = token.getPos() - 1;
+        this.line = token.getLine() - 1;
     }
 
-    return s.toString();
-  }
+    private String getText(int acceptLength)
+    {
+        StringBuffer s = new StringBuffer(acceptLength);
+        for(int i = 0; i < acceptLength; i++)
+        {
+            s.append(this.text.charAt(i));
+        }
 
-  private static int[][][][] gotoTable;
-  /*  {
-          { // NORMAL
-              {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {39, 39, 5}, {40, 40, 6}, {41, 41, 7}, {42, 42, 8}, {43, 43, 9}, {44, 44, 10}, {45, 45, 11}, {46, 46, 12}, {47, 47, 13}, {48, 48, 14}, {49, 57, 15}, {58, 58, 16}, {59, 59, 17}, {61, 61, 18}, {63, 63, 19}, {65, 65, 20}, {72, 72, 21}, {73, 73, 22}, {78, 78, 23}, {80, 80, 24}, {83, 83, 25}, {84, 84, 26}, {91, 91, 27}, {93, 93, 28}, {97, 122, 29}, {123, 123, 30}, {124, 124, 31}, {125, 125, 32}, },
-              {{9, 32, -2}, },
-              {{9, 32, -2}, },
-              {{9, 9, 1}, {10, 10, 33}, {13, 32, -2}, },
-              {{9, 32, -2}, },
-              {{0, 9, 34}, {11, 12, 34}, {14, 38, 34}, {39, 39, 35}, {40, 65535, 34}, },
-              {},
-              {},
-              {},
-              {},
-              {},
-              {{62, 62, 36}, },
-              {{46, 46, 37}, },
-              {{42, 42, 38}, {47, 47, 39}, },
-              {{48, 57, 15}, {88, 88, 40}, {120, 120, 41}, },
-              {{48, 57, 15}, },
-              {},
-              {},
-              {},
-              {},
-              {{98, 98, 42}, },
-              {{101, 101, 43}, },
-              {{103, 103, 44}, },
-              {{101, 101, 45}, {117, 117, 46}, },
-              {{97, 97, 47}, {114, 114, 48}, },
-              {{116, 116, 49}, {121, 121, 50}, },
-              {{111, 111, 51}, {114, 114, 52}, },
-              {},
-              {},
-              {{48, 57, 53}, {95, 95, 54}, {97, 122, 55}, },
-              {},
-              {},
-              {},
-              {{9, 32, -2}, },
-              {{0, 9, 56}, {11, 12, 56}, {14, 38, 56}, {39, 39, 57}, {40, 65535, 56}, },
-              {{39, 39, 58}, },
-              {},
-              {},
-              {{0, 41, 59}, {42, 42, 60}, {43, 65535, 59}, },
-              {{0, 9, 61}, {10, 10, 62}, {11, 12, 61}, {13, 13, 63}, {14, 65535, 61}, },
-              {{48, 57, 64}, {65, 70, 64}, {97, 102, 64}, },
-              {{48, 102, -42}, },
-              {{115, 115, 65}, },
-              {{108, 108, 66}, },
-              {{110, 110, 67}, },
-              {{119, 119, 68}, },
-              {{108, 108, 69}, },
-              {{99, 99, 70}, },
-              {{111, 111, 71}, },
-              {{97, 97, 72}, },
-              {{110, 110, 73}, },
-              {{107, 107, 74}, },
-              {{101, 101, 75}, },
-              {{48, 122, -31}, },
-              {{97, 122, 76}, },
-              {{48, 122, -31}, },
-              {{0, 38, -36}, {39, 39, 77}, {40, 65535, 56}, },
-              {},
-              {},
-              {{0, 65535, -40}, },
-              {{0, 41, 78}, {42, 42, 60}, {43, 46, 78}, {47, 47, 79}, {48, 65535, 78}, },
-              {{0, 65535, -41}, },
-              {},
-              {{10, 10, 80}, },
-              {{48, 102, -42}, },
-              {{116, 116, 81}, },
-              {{112, 112, 82}, },
-              {{111, 111, 83}, },
-              {},
-              {{108, 108, 84}, },
-              {{107, 107, 85}, },
-              {{100, 100, 86}, },
-              {{116, 116, 87}, },
-              {{116, 116, 88}, },
-              {{101, 101, 89}, },
-              {{101, 101, 90}, },
-              {{48, 57, 91}, {95, 95, 54}, {97, 122, 92}, },
-              {},
-              {{0, 41, 93}, {42, 42, 94}, {43, 65535, 93}, },
-              {},
-              {},
-              {{114, 114, 95}, },
-              {{101, 101, 96}, },
-              {{114, 114, 97}, },
-              {},
-              {{97, 97, 98}, },
-              {{117, 117, 99}, },
-              {{101, 101, 100}, },
-              {{97, 97, 101}, },
-              {{110, 110, 102}, },
-              {},
-              {{48, 122, -78}, },
-              {{48, 122, -78}, },
-              {{0, 65535, -80}, },
-              {{0, 41, 78}, {42, 42, 94}, {43, 65535, -62}, },
-              {{97, 97, 103}, },
-              {{114, 114, 104}, },
-              {{101, 101, 105}, },
-              {{103, 103, 106}, },
-              {{99, 99, 107}, },
-              {{115, 115, 108}, },
-              {{120, 120, 109}, },
-              {{115, 115, 110}, },
-              {{99, 99, 111}, },
-              {{115, 115, 112}, },
-              {{100, 100, 113}, },
-              {{101, 101, 114}, },
-              {{116, 116, 115}, },
-              {},
-              {},
-              {},
-              {{116, 116, 116}, },
-              {},
-              {},
-              {},
-              {{105, 105, 117}, },
-              {},
-              {{111, 111, 118}, },
-              {{110, 110, 119}, },
-              {{115, 115, 120}, },
-              {},
-          }
-          { // PACKAGE
-              {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {36, 36, 5}, {39, 39, 6}, {40, 40, 7}, {41, 41, 8}, {42, 42, 9}, {43, 43, 10}, {44, 44, 11}, {45, 45, 12}, {46, 46, 13}, {47, 47, 14}, {48, 48, 15}, {49, 57, 16}, {58, 58, 17}, {59, 59, 18}, {61, 61, 19}, {63, 63, 20}, {65, 65, 21}, {66, 71, 22}, {72, 72, 23}, {73, 73, 24}, {74, 77, 22}, {78, 78, 25}, {79, 79, 22}, {80, 80, 26}, {81, 82, 22}, {83, 83, 27}, {84, 84, 28}, {85, 90, 22}, {91, 91, 29}, {93, 93, 30}, {95, 95, 31}, {97, 122, 32}, {123, 123, 33}, {124, 124, 34}, {125, 125, 35}, },
-              {{9, 32, -2}, },
-              {{9, 32, -2}, },
-              {{9, 9, 1}, {10, 10, 36}, {13, 32, -2}, },
-              {{9, 32, -2}, },
-              {{36, 36, 37}, {48, 57, 38}, {65, 90, 39}, {95, 95, 40}, {97, 122, 41}, },
-              {{0, 9, 42}, {11, 12, 42}, {14, 38, 42}, {39, 39, 43}, {40, 65535, 42}, },
-              {},
-              {},
-              {},
-              {},
-              {},
-              {{62, 62, 44}, },
-              {{46, 46, 45}, },
-              {{42, 42, 46}, {47, 47, 47}, },
-              {{48, 57, 16}, {88, 88, 48}, {120, 120, 49}, },
-              {{48, 57, 16}, },
-              {},
-              {},
-              {},
-              {},
-              {{36, 95, -7}, {97, 97, 41}, {98, 98, 50}, {99, 122, 41}, },
-              {{36, 122, -7}, },
-              {{36, 95, -7}, {97, 100, 41}, {101, 101, 51}, {102, 122, 41}, },
-              {{36, 95, -7}, {97, 102, 41}, {103, 103, 52}, {104, 122, 41}, },
-              {{36, 100, -25}, {101, 101, 53}, {102, 116, 41}, {117, 117, 54}, {118, 122, 41}, },
-              {{36, 95, -7}, {97, 113, 41}, {114, 114, 55}, {115, 122, 41}, },
-              {{36, 95, -7}, {97, 115, 41}, {116, 116, 56}, {117, 120, 41}, {121, 121, 57}, {122, 122, 41}, },
-              {{36, 95, -7}, {97, 110, 41}, {111, 111, 58}, {112, 113, 41}, {114, 114, 59}, {115, 122, 41}, },
-              {},
-              {},
-              {{36, 122, -7}, },
-              {{36, 36, 37}, {48, 57, 60}, {65, 90, 39}, {95, 95, 61}, {97, 122, 62}, },
-              {},
-              {},
-              {},
-              {{9, 32, -2}, },
-              {{36, 122, -7}, },
-              {{36, 122, -7}, },
-              {{36, 122, -7}, },
-              {{36, 122, -7}, },
-              {{36, 122, -7}, },
-              {{0, 9, 63}, {11, 12, 63}, {14, 38, 63}, {39, 39, 64}, {40, 65535, 63}, },
-              {{39, 39, 65}, },
-              {},
-              {},
-              {{0, 41, 66}, {42, 42, 67}, {43, 65535, 66}, },
-              {{0, 9, 68}, {10, 10, 69}, {11, 12, 68}, {13, 13, 70}, {14, 65535, 68}, },
-              {{48, 57, 71}, {65, 70, 71}, {97, 102, 71}, },
-              {{48, 102, -50}, },
-              {{36, 95, -7}, {97, 114, 41}, {115, 115, 72}, {116, 122, 41}, },
-              {{36, 95, -7}, {97, 107, 41}, {108, 108, 73}, {109, 122, 41}, },
-              {{36, 95, -7}, {97, 109, 41}, {110, 110, 74}, {111, 122, 41}, },
-              {{36, 95, -7}, {97, 118, 41}, {119, 119, 75}, {120, 122, 41}, },
-              {{36, 107, -53}, {108, 108, 76}, {109, 122, 41}, },
-              {{36, 110, -30}, {111, 111, 77}, {112, 122, 41}, },
-              {{36, 95, -7}, {97, 97, 78}, {98, 122, 41}, },
-              {{36, 109, -54}, {110, 110, 79}, {111, 122, 41}, },
-              {{36, 95, -7}, {97, 106, 41}, {107, 107, 80}, {108, 122, 41}, },
-              {{36, 100, -25}, {101, 101, 81}, {102, 122, 41}, },
-              {{36, 122, -34}, },
-              {{36, 95, -7}, {97, 122, 82}, },
-              {{36, 122, -34}, },
-              {{0, 38, -44}, {39, 39, 83}, {40, 65535, 63}, },
-              {},
-              {},
-              {{0, 65535, -48}, },
-              {{0, 41, 84}, {42, 42, 67}, {43, 46, 84}, {47, 47, 85}, {48, 65535, 84}, },
-              {{0, 65535, -49}, },
-              {},
-              {{10, 10, 86}, },
-              {{48, 102, -50}, },
-              {{36, 115, -29}, {116, 116, 87}, {117, 122, 41}, },
-              {{36, 95, -7}, {97, 111, 41}, {112, 112, 88}, {113, 122, 41}, },
-              {{36, 110, -30}, {111, 111, 89}, {112, 122, 41}, },
-              {{36, 122, -7}, },
-              {{36, 107, -53}, {108, 108, 90}, {109, 122, 41}, },
-              {{36, 95, -7}, {97, 99, 41}, {100, 100, 91}, {101, 122, 41}, },
-              {{36, 115, -29}, {116, 116, 92}, {117, 122, 41}, },
-              {{36, 115, -29}, {116, 116, 93}, {117, 122, 41}, },
-              {{36, 100, -25}, {101, 101, 94}, {102, 122, 41}, },
-              {{36, 100, -25}, {101, 101, 95}, {102, 122, 41}, },
-              {{36, 36, 37}, {48, 57, 96}, {65, 95, -34}, {97, 122, 97}, },
-              {},
-              {{0, 41, 98}, {42, 42, 99}, {43, 65535, 98}, },
-              {},
-              {},
-              {{36, 113, -28}, {114, 114, 100}, {115, 122, 41}, },
-              {{36, 100, -25}, {101, 101, 101}, {102, 122, 41}, },
-              {{36, 113, -28}, {114, 114, 102}, {115, 122, 41}, },
-              {{36, 122, -7}, },
-              {{36, 95, -7}, {97, 116, 41}, {117, 117, 103}, {118, 122, 41}, },
-              {{36, 100, -25}, {101, 101, 104}, {102, 122, 41}, },
-              {{36, 95, -7}, {97, 97, 105}, {98, 122, 41}, },
-              {{36, 109, -54}, {110, 110, 106}, {111, 122, 41}, },
-              {{36, 122, -7}, },
-              {{36, 122, -84}, },
-              {{36, 122, -84}, },
-              {{0, 65535, -86}, },
-              {{0, 41, 84}, {42, 42, 99}, {43, 65535, -69}, },
-              {{36, 95, -7}, {97, 97, 107}, {98, 122, 41}, },
-              {{36, 113, -28}, {114, 114, 108}, {115, 122, 41}, },
-              {{36, 100, -25}, {101, 101, 109}, {102, 122, 41}, },
-              {{36, 95, -7}, {97, 98, 41}, {99, 99, 110}, {100, 122, 41}, },
-              {{36, 114, -52}, {115, 115, 111}, {116, 122, 41}, },
-              {{36, 95, -7}, {97, 119, 41}, {120, 120, 112}, {121, 122, 41}, },
-              {{36, 114, -52}, {115, 115, 113}, {116, 122, 41}, },
-              {{36, 98, -105}, {99, 99, 114}, {100, 122, 41}, },
-              {{36, 114, -52}, {115, 115, 115}, {116, 122, 41}, },
-              {{36, 99, -79}, {100, 100, 116}, {101, 122, 41}, },
-              {{36, 115, -29}, {116, 116, 117}, {117, 122, 41}, },
-              {{36, 122, -7}, },
-              {{36, 122, -7}, },
-              {{36, 122, -7}, },
-              {{36, 115, -29}, {116, 116, 118}, {117, 122, 41}, },
-              {{36, 122, -7}, },
-              {{36, 122, -7}, },
-              {{36, 95, -7}, {97, 104, 41}, {105, 105, 119}, {106, 122, 41}, },
-              {{36, 122, -7}, },
-              {{36, 110, -30}, {111, 111, 120}, {112, 122, 41}, },
-              {{36, 109, -54}, {110, 110, 121}, {111, 122, 41}, },
-              {{36, 114, -52}, {115, 115, 122}, {116, 122, 41}, },
-              {{36, 122, -7}, },
-          }
-      };*/
+        return s.toString();
+    }
 
-  private static int[][] accept;
-  /*  {
-          // NORMAL
-          {-1, 38, 38, 38, 38, -1, 20, 21, 27, 24, 29, 25, 14, 30, 35, 35, 32, 16, 17, 26, -1, -1, -1, -1, 13, -1, 12, 18, 19, 33, 22, 28, 23, 38, -1, -1, 31, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 33, -1, 34, 34, -1, -1, -1, 39, 39, 36, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, 33, 37, -1, 39, 39, -1, -1, -1, 11, -1, -1, -1, -1, -1, 9, 33, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 8, 4, -1, 3, 5, 1, -1, 7, -1, -1, -1, 6, },
-          // PACKAGE
-          {-1, 38, 38, 38, 38, 0, -1, 20, 21, 27, 24, 29, 25, 14, 30, 35, 35, 32, 16, 17, 26, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, 22, 28, 23, 38, 0, 0, 0, 0, 0, -1, -1, 31, 15, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 34, 34, -1, -1, -1, 39, 39, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, -1, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
-   
-      };*/
+    private static int[][][][] gotoTable;
+/*  {
+        { // NORMAL
+            {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {39, 39, 5}, {40, 40, 6}, {41, 41, 7}, {42, 42, 8}, {43, 43, 9}, {44, 44, 10}, {45, 45, 11}, {46, 46, 12}, {47, 47, 13}, {48, 48, 14}, {49, 57, 15}, {58, 58, 16}, {59, 59, 17}, {61, 61, 18}, {63, 63, 19}, {65, 65, 20}, {72, 72, 21}, {73, 73, 22}, {78, 78, 23}, {80, 80, 24}, {83, 83, 25}, {84, 84, 26}, {91, 91, 27}, {93, 93, 28}, {97, 122, 29}, {123, 123, 30}, {124, 124, 31}, {125, 125, 32}, },
+            {{9, 32, -2}, },
+            {{9, 32, -2}, },
+            {{9, 9, 1}, {10, 10, 33}, {13, 32, -2}, },
+            {{9, 32, -2}, },
+            {{0, 9, 34}, {11, 12, 34}, {14, 38, 34}, {39, 39, 35}, {40, 65535, 34}, },
+            {},
+            {},
+            {},
+            {},
+            {},
+            {{62, 62, 36}, },
+            {{46, 46, 37}, },
+            {{42, 42, 38}, {47, 47, 39}, },
+            {{48, 57, 15}, {88, 88, 40}, {120, 120, 41}, },
+            {{48, 57, 15}, },
+            {},
+            {},
+            {},
+            {},
+            {{98, 98, 42}, },
+            {{101, 101, 43}, },
+            {{103, 103, 44}, },
+            {{101, 101, 45}, {117, 117, 46}, },
+            {{97, 97, 47}, {114, 114, 48}, },
+            {{116, 116, 49}, {121, 121, 50}, },
+            {{111, 111, 51}, {114, 114, 52}, },
+            {},
+            {},
+            {{48, 57, 53}, {95, 95, 54}, {97, 122, 55}, },
+            {},
+            {},
+            {},
+            {{9, 32, -2}, },
+            {{0, 9, 56}, {11, 12, 56}, {14, 38, 56}, {39, 39, 57}, {40, 65535, 56}, },
+            {{39, 39, 58}, },
+            {},
+            {},
+            {{0, 41, 59}, {42, 42, 60}, {43, 65535, 59}, },
+            {{0, 9, 61}, {10, 10, 62}, {11, 12, 61}, {13, 13, 63}, {14, 65535, 61}, },
+            {{48, 57, 64}, {65, 70, 64}, {97, 102, 64}, },
+            {{48, 102, -42}, },
+            {{115, 115, 65}, },
+            {{108, 108, 66}, },
+            {{110, 110, 67}, },
+            {{119, 119, 68}, },
+            {{108, 108, 69}, },
+            {{99, 99, 70}, },
+            {{111, 111, 71}, },
+            {{97, 97, 72}, },
+            {{110, 110, 73}, },
+            {{107, 107, 74}, },
+            {{101, 101, 75}, },
+            {{48, 122, -31}, },
+            {{97, 122, 76}, },
+            {{48, 122, -31}, },
+            {{0, 38, -36}, {39, 39, 77}, {40, 65535, 56}, },
+            {},
+            {},
+            {{0, 65535, -40}, },
+            {{0, 41, 78}, {42, 42, 60}, {43, 46, 78}, {47, 47, 79}, {48, 65535, 78}, },
+            {{0, 65535, -41}, },
+            {},
+            {{10, 10, 80}, },
+            {{48, 102, -42}, },
+            {{116, 116, 81}, },
+            {{112, 112, 82}, },
+            {{111, 111, 83}, },
+            {},
+            {{108, 108, 84}, },
+            {{107, 107, 85}, },
+            {{100, 100, 86}, },
+            {{116, 116, 87}, },
+            {{116, 116, 88}, },
+            {{101, 101, 89}, },
+            {{101, 101, 90}, },
+            {{48, 57, 91}, {95, 95, 54}, {97, 122, 92}, },
+            {},
+            {{0, 41, 93}, {42, 42, 94}, {43, 65535, 93}, },
+            {},
+            {},
+            {{114, 114, 95}, },
+            {{101, 101, 96}, },
+            {{114, 114, 97}, },
+            {},
+            {{97, 97, 98}, },
+            {{117, 117, 99}, },
+            {{101, 101, 100}, },
+            {{97, 97, 101}, },
+            {{110, 110, 102}, },
+            {},
+            {{48, 122, -78}, },
+            {{48, 122, -78}, },
+            {{0, 65535, -80}, },
+            {{0, 41, 78}, {42, 42, 94}, {43, 65535, -62}, },
+            {{97, 97, 103}, },
+            {{114, 114, 104}, },
+            {{101, 101, 105}, },
+            {{103, 103, 106}, },
+            {{99, 99, 107}, },
+            {{115, 115, 108}, },
+            {{120, 120, 109}, },
+            {{115, 115, 110}, },
+            {{99, 99, 111}, },
+            {{115, 115, 112}, },
+            {{100, 100, 113}, },
+            {{101, 101, 114}, },
+            {{116, 116, 115}, },
+            {},
+            {},
+            {},
+            {{116, 116, 116}, },
+            {},
+            {},
+            {},
+            {{105, 105, 117}, },
+            {},
+            {{111, 111, 118}, },
+            {{110, 110, 119}, },
+            {{115, 115, 120}, },
+            {},
+        }
+        { // PACKAGE
+            {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {36, 36, 5}, {39, 39, 6}, {40, 40, 7}, {41, 41, 8}, {42, 42, 9}, {43, 43, 10}, {44, 44, 11}, {45, 45, 12}, {46, 46, 13}, {47, 47, 14}, {48, 48, 15}, {49, 57, 16}, {58, 58, 17}, {59, 59, 18}, {61, 61, 19}, {63, 63, 20}, {65, 65, 21}, {66, 71, 22}, {72, 72, 23}, {73, 73, 24}, {74, 77, 22}, {78, 78, 25}, {79, 79, 22}, {80, 80, 26}, {81, 82, 22}, {83, 83, 27}, {84, 84, 28}, {85, 90, 22}, {91, 91, 29}, {93, 93, 30}, {95, 95, 31}, {97, 122, 32}, {123, 123, 33}, {124, 124, 34}, {125, 125, 35}, },
+            {{9, 32, -2}, },
+            {{9, 32, -2}, },
+            {{9, 9, 1}, {10, 10, 36}, {13, 32, -2}, },
+            {{9, 32, -2}, },
+            {{36, 36, 37}, {48, 57, 38}, {65, 90, 39}, {95, 95, 40}, {97, 122, 41}, },
+            {{0, 9, 42}, {11, 12, 42}, {14, 38, 42}, {39, 39, 43}, {40, 65535, 42}, },
+            {},
+            {},
+            {},
+            {},
+            {},
+            {{62, 62, 44}, },
+            {{46, 46, 45}, },
+            {{42, 42, 46}, {47, 47, 47}, },
+            {{48, 57, 16}, {88, 88, 48}, {120, 120, 49}, },
+            {{48, 57, 16}, },
+            {},
+            {},
+            {},
+            {},
+            {{36, 95, -7}, {97, 97, 41}, {98, 98, 50}, {99, 122, 41}, },
+            {{36, 122, -7}, },
+            {{36, 95, -7}, {97, 100, 41}, {101, 101, 51}, {102, 122, 41}, },
+            {{36, 95, -7}, {97, 102, 41}, {103, 103, 52}, {104, 122, 41}, },
+            {{36, 100, -25}, {101, 101, 53}, {102, 116, 41}, {117, 117, 54}, {118, 122, 41}, },
+            {{36, 95, -7}, {97, 113, 41}, {114, 114, 55}, {115, 122, 41}, },
+            {{36, 95, -7}, {97, 115, 41}, {116, 116, 56}, {117, 120, 41}, {121, 121, 57}, {122, 122, 41}, },
+            {{36, 95, -7}, {97, 110, 41}, {111, 111, 58}, {112, 113, 41}, {114, 114, 59}, {115, 122, 41}, },
+            {},
+            {},
+            {{36, 122, -7}, },
+            {{36, 36, 37}, {48, 57, 60}, {65, 90, 39}, {95, 95, 61}, {97, 122, 62}, },
+            {},
+            {},
+            {},
+            {{9, 32, -2}, },
+            {{36, 122, -7}, },
+            {{36, 122, -7}, },
+            {{36, 122, -7}, },
+            {{36, 122, -7}, },
+            {{36, 122, -7}, },
+            {{0, 9, 63}, {11, 12, 63}, {14, 38, 63}, {39, 39, 64}, {40, 65535, 63}, },
+            {{39, 39, 65}, },
+            {},
+            {},
+            {{0, 41, 66}, {42, 42, 67}, {43, 65535, 66}, },
+            {{0, 9, 68}, {10, 10, 69}, {11, 12, 68}, {13, 13, 70}, {14, 65535, 68}, },
+            {{48, 57, 71}, {65, 70, 71}, {97, 102, 71}, },
+            {{48, 102, -50}, },
+            {{36, 95, -7}, {97, 114, 41}, {115, 115, 72}, {116, 122, 41}, },
+            {{36, 95, -7}, {97, 107, 41}, {108, 108, 73}, {109, 122, 41}, },
+            {{36, 95, -7}, {97, 109, 41}, {110, 110, 74}, {111, 122, 41}, },
+            {{36, 95, -7}, {97, 118, 41}, {119, 119, 75}, {120, 122, 41}, },
+            {{36, 107, -53}, {108, 108, 76}, {109, 122, 41}, },
+            {{36, 110, -30}, {111, 111, 77}, {112, 122, 41}, },
+            {{36, 95, -7}, {97, 97, 78}, {98, 122, 41}, },
+            {{36, 109, -54}, {110, 110, 79}, {111, 122, 41}, },
+            {{36, 95, -7}, {97, 106, 41}, {107, 107, 80}, {108, 122, 41}, },
+            {{36, 100, -25}, {101, 101, 81}, {102, 122, 41}, },
+            {{36, 122, -34}, },
+            {{36, 95, -7}, {97, 122, 82}, },
+            {{36, 122, -34}, },
+            {{0, 38, -44}, {39, 39, 83}, {40, 65535, 63}, },
+            {},
+            {},
+            {{0, 65535, -48}, },
+            {{0, 41, 84}, {42, 42, 67}, {43, 46, 84}, {47, 47, 85}, {48, 65535, 84}, },
+            {{0, 65535, -49}, },
+            {},
+            {{10, 10, 86}, },
+            {{48, 102, -50}, },
+            {{36, 115, -29}, {116, 116, 87}, {117, 122, 41}, },
+            {{36, 95, -7}, {97, 111, 41}, {112, 112, 88}, {113, 122, 41}, },
+            {{36, 110, -30}, {111, 111, 89}, {112, 122, 41}, },
+            {{36, 122, -7}, },
+            {{36, 107, -53}, {108, 108, 90}, {109, 122, 41}, },
+            {{36, 95, -7}, {97, 99, 41}, {100, 100, 91}, {101, 122, 41}, },
+            {{36, 115, -29}, {116, 116, 92}, {117, 122, 41}, },
+            {{36, 115, -29}, {116, 116, 93}, {117, 122, 41}, },
+            {{36, 100, -25}, {101, 101, 94}, {102, 122, 41}, },
+            {{36, 100, -25}, {101, 101, 95}, {102, 122, 41}, },
+            {{36, 36, 37}, {48, 57, 96}, {65, 95, -34}, {97, 122, 97}, },
+            {},
+            {{0, 41, 98}, {42, 42, 99}, {43, 65535, 98}, },
+            {},
+            {},
+            {{36, 113, -28}, {114, 114, 100}, {115, 122, 41}, },
+            {{36, 100, -25}, {101, 101, 101}, {102, 122, 41}, },
+            {{36, 113, -28}, {114, 114, 102}, {115, 122, 41}, },
+            {{36, 122, -7}, },
+            {{36, 95, -7}, {97, 116, 41}, {117, 117, 103}, {118, 122, 41}, },
+            {{36, 100, -25}, {101, 101, 104}, {102, 122, 41}, },
+            {{36, 95, -7}, {97, 97, 105}, {98, 122, 41}, },
+            {{36, 109, -54}, {110, 110, 106}, {111, 122, 41}, },
+            {{36, 122, -7}, },
+            {{36, 122, -84}, },
+            {{36, 122, -84}, },
+            {{0, 65535, -86}, },
+            {{0, 41, 84}, {42, 42, 99}, {43, 65535, -69}, },
+            {{36, 95, -7}, {97, 97, 107}, {98, 122, 41}, },
+            {{36, 113, -28}, {114, 114, 108}, {115, 122, 41}, },
+            {{36, 100, -25}, {101, 101, 109}, {102, 122, 41}, },
+            {{36, 95, -7}, {97, 98, 41}, {99, 99, 110}, {100, 122, 41}, },
+            {{36, 114, -52}, {115, 115, 111}, {116, 122, 41}, },
+            {{36, 95, -7}, {97, 119, 41}, {120, 120, 112}, {121, 122, 41}, },
+            {{36, 114, -52}, {115, 115, 113}, {116, 122, 41}, },
+            {{36, 98, -105}, {99, 99, 114}, {100, 122, 41}, },
+            {{36, 114, -52}, {115, 115, 115}, {116, 122, 41}, },
+            {{36, 99, -79}, {100, 100, 116}, {101, 122, 41}, },
+            {{36, 115, -29}, {116, 116, 117}, {117, 122, 41}, },
+            {{36, 122, -7}, },
+            {{36, 122, -7}, },
+            {{36, 122, -7}, },
+            {{36, 115, -29}, {116, 116, 118}, {117, 122, 41}, },
+            {{36, 122, -7}, },
+            {{36, 122, -7}, },
+            {{36, 95, -7}, {97, 104, 41}, {105, 105, 119}, {106, 122, 41}, },
+            {{36, 122, -7}, },
+            {{36, 110, -30}, {111, 111, 120}, {112, 122, 41}, },
+            {{36, 109, -54}, {110, 110, 121}, {111, 122, 41}, },
+            {{36, 114, -52}, {115, 115, 122}, {116, 122, 41}, },
+            {{36, 122, -7}, },
+        }
+    };*/
 
-  public static class State
-  {
-    public final static State NORMAL = new State(0);
-    public final static State PACKAGE = new State(1);
+    private static int[][] accept;
+/*  {
+        // NORMAL
+        {-1, 38, 38, 38, 38, -1, 20, 21, 27, 24, 29, 25, 14, 30, 35, 35, 32, 16, 17, 26, -1, -1, -1, -1, 13, -1, 12, 18, 19, 33, 22, 28, 23, 38, -1, -1, 31, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 33, -1, 34, 34, -1, -1, -1, 39, 39, 36, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, 33, 37, -1, 39, 39, -1, -1, -1, 11, -1, -1, -1, -1, -1, 9, 33, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 8, 4, -1, 3, 5, 1, -1, 7, -1, -1, -1, 6, },
+        // PACKAGE
+        {-1, 38, 38, 38, 38, 0, -1, 20, 21, 27, 24, 29, 25, 14, 30, 35, 35, 32, 16, 17, 26, 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, 0, 0, 22, 28, 23, 38, 0, 0, 0, 0, 0, -1, -1, 31, 15, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 34, 34, -1, -1, -1, 39, 39, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, -1, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
 
-    private int id;
+    };*/
 
-    private State(int id)
+    public static class State
     {
-      this.id = id;
-    }
+        public final static State NORMAL = new State(0);
+        public final static State PACKAGE = new State(1);
 
-    public int id()
-    {
-      return id;
+        private int id;
+
+        private State(  int id)
+        {
+            this.id = id;
+        }
+
+        public int id()
+        {
+            return this.id;
+        }
     }
-  }
 
-  static
-  {
-    try
+    static
     {
-      DataInputStream s = new DataInputStream(
-                            new BufferedInputStream(
-                              Lexer.class.getResourceAsStream("lexer.dat")));
-
-      // read gotoTable
-      int length = s.readInt();
-      gotoTable = new int[length][][][];
-      for(int i = 0; i < gotoTable.length; i++)
-      {
-        length = s.readInt();
-        gotoTable[i] = new int[length][][];
-        for(int j = 0; j < gotoTable[i].length; j++)
+        try
         {
-          length = s.readInt();
-          gotoTable[i][j] = new int[length][3];
-          for(int k = 0; k < gotoTable[i][j].length; k++)
-          {
-            for(int l = 0; l < 3; l++)
+            DataInputStream s = new DataInputStream(
+                new BufferedInputStream(
+                Lexer.class.getResourceAsStream("lexer.dat")));
+
+            // read gotoTable
+            int length = s.readInt();
+            gotoTable = new int[length][][][];
+            for(int i = 0; i < gotoTable.length; i++)
             {
-              gotoTable[i][j][k][l] = s.readInt();
+                length = s.readInt();
+                gotoTable[i] = new int[length][][];
+                for(int j = 0; j < gotoTable[i].length; j++)
+                {
+                    length = s.readInt();
+                    gotoTable[i][j] = new int[length][3];
+                    for(int k = 0; k < gotoTable[i][j].length; k++)
+                    {
+                        for(int l = 0; l < 3; l++)
+                        {
+                            gotoTable[i][j][k][l] = s.readInt();
+                        }
+                    }
+                }
+            }
+
+            // read accept
+            length = s.readInt();
+            accept = new int[length][];
+            for(int i = 0; i < accept.length; i++)
+            {
+                length = s.readInt();
+                accept[i] = new int[length];
+                for(int j = 0; j < accept[i].length; j++)
+                {
+                    accept[i][j] = s.readInt();
+                }
             }
-          }
-        }
-      }
 
-      // read accept
-      length = s.readInt();
-      accept = new int[length][];
-      for(int i = 0; i < accept.length; i++)
-      {
-        length = s.readInt();
-        accept[i] = new int[length];
-        for(int j = 0; j < accept[i].length; j++)
+            s.close();
+        }
+        catch(Exception e)
         {
-          accept[i][j] = s.readInt();
+            throw new RuntimeException("The file \"lexer.dat\" is either missing or corrupted.");
         }
-      }
-
-      s.close();
-    }
-    catch(Exception e)
-    {
-      throw new RuntimeException("The file \"lexer.dat\" is either missing or corrupted.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/lexer/LexerException.java b/src/main/java/org/sablecc/sablecc/lexer/LexerException.java
index 3e888e4f7476f46e642d0dc3014f5434386d10ac..9ae73de75599db94002bc36552904cd6cd2b6adf 100644
--- a/src/main/java/org/sablecc/sablecc/lexer/LexerException.java
+++ b/src/main/java/org/sablecc/sablecc/lexer/LexerException.java
@@ -2,10 +2,11 @@
 
 package org.sablecc.sablecc.lexer;
 
+@SuppressWarnings({"serial"})
 public class LexerException extends Exception
 {
-  public LexerException(String message)
-  {
-    super(message);
-  }
+    public LexerException(String message)
+    {
+        super(message);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 97b1e8c2bea3a4c284edb644c6081bf2f74a7d53..6cdd013859f7ad23badec3246844cb57e1a14ae9 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -5,185 +5,183 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AAlt extends PAlt
 {
-  private TId _altName_;
-  private final LinkedList _elems_ = new TypedLinkedList(new Elems_Cast());
-  private PAltTransform _altTransform_;
-
-  public AAlt()
-  {}
+    private TId _altName_;
+    private final LinkedList<PElem> _elems_ = new LinkedList<PElem>();
+    private PAltTransform _altTransform_;
 
-  public AAlt(
-    TId _altName_,
-    List _elems_,
-    PAltTransform _altTransform_)
-  {
-    setAltName(_altName_);
+    public AAlt()
+    {
+        // Constructor
+    }
 
+    public AAlt(
+          TId _altName_,
+          List<PElem> _elems_,
+          PAltTransform _altTransform_)
     {
-      this._elems_.clear();
-      this._elems_.addAll(_elems_);
+        // Constructor
+        setAltName(_altName_);
+
+        setElems(_elems_);
+
+        setAltTransform(_altTransform_);
+
     }
 
-    setAltTransform(_altTransform_);
-
-  }
-  public Object clone()
-  {
-    return new AAlt(
-             (TId) cloneNode(_altName_),
-             cloneList(_elems_),
-             (PAltTransform) cloneNode(_altTransform_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAAlt(this);
-  }
-
-  public TId getAltName()
-  {
-    return _altName_;
-  }
-
-  public void setAltName(TId node)
-  {
-    if(_altName_ != null)
+    @Override
+    public Object clone()
     {
-      _altName_.parent(null);
+        return new AAlt(
+            cloneNode(this._altName_),
+            cloneList(this._elems_),
+            cloneNode(this._altTransform_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        ((Analysis) sw).caseAAlt(this);
+    }
 
-      node.parent(this);
+    public TId getAltName()
+    {
+        return this._altName_;
     }
 
-    _altName_ = node;
-  }
+    public void setAltName(TId node)
+    {
+        if(this._altName_ != null)
+        {
+            this._altName_.parent(null);
+        }
 
-  public LinkedList getElems()
-  {
-    return _elems_;
-  }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-  public void setElems(List list)
-  {
-    _elems_.clear();
-    _elems_.addAll(list);
-  }
+            node.parent(this);
+        }
 
-  public PAltTransform getAltTransform()
-  {
-    return _altTransform_;
-  }
+        this._altName_ = node;
+    }
 
-  public void setAltTransform(PAltTransform node)
-  {
-    if(_altTransform_ != null)
+    public LinkedList<PElem> getElems()
     {
-      _altTransform_.parent(null);
+        return this._elems_;
     }
 
-    if(node != null)
+    public void setElems(List<PElem> list)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        this._elems_.clear();
+        this._elems_.addAll(list);
+        for(PElem e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-      node.parent(this);
+            e.parent(this);
+        }
     }
 
-    _altTransform_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_altName_)
-           + toString(_elems_)
-           + toString(_altTransform_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_altName_ == child)
+    public PAltTransform getAltTransform()
     {
-      _altName_ = null;
-      return;
+        return this._altTransform_;
     }
 
-    if(_elems_.remove(child))
+    public void setAltTransform(PAltTransform node)
     {
-      return;
-    }
+        if(this._altTransform_ != null)
+        {
+            this._altTransform_.parent(null);
+        }
 
-    if(_altTransform_ == child)
-    {
-      _altTransform_ = null;
-      return;
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-  }
+            node.parent(this);
+        }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_altName_ == oldChild)
+        this._altTransform_ = node;
+    }
+
+    @Override
+    public String toString()
     {
-      setAltName((TId) newChild);
-      return;
+        return ""
+            + toString(this._altName_)
+            + toString(this._elems_)
+            + toString(this._altTransform_);
     }
 
-    for(ListIterator i = _elems_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._altName_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._altName_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._elems_.remove(child))
+        {
+            return;
+        }
 
-    if(_altTransform_ == oldChild)
-    {
-      setAltTransform((PAltTransform) newChild);
-      return;
-    }
+        if(this._altTransform_ == child)
+        {
+            this._altTransform_ = null;
+            return;
+        }
 
-  }
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class Elems_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PElem node = (PElem) o;
+        // Replace child
+        if(this._altName_ == oldChild)
+        {
+            setAltName((TId) newChild);
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AAlt.this))
-      {
-        node.parent().removeChild(node);
-      }
+        for(ListIterator<PElem> i = this._elems_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PElem) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AAlt.this))
-      {
-        node.parent(AAlt.this);
-      }
+        if(this._altTransform_ == oldChild)
+        {
+            setAltTransform((PAltTransform) newChild);
+            return;
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 2cd658db4e855488e1d29be852c299301affece3..5e92bd16cfd435326cd7a5123275f76c2acb35b1 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -5,185 +5,183 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AAltTransform extends PAltTransform
 {
-  private TLBrace _lBrace_;
-  private final LinkedList _terms_ = new TypedLinkedList(new Terms_Cast());
-  private TRBrace _rBrace_;
-
-  public AAltTransform()
-  {}
+    private TLBrace _lBrace_;
+    private final LinkedList<PTerm> _terms_ = new LinkedList<PTerm>();
+    private TRBrace _rBrace_;
 
-  public AAltTransform(
-    TLBrace _lBrace_,
-    List _terms_,
-    TRBrace _rBrace_)
-  {
-    setLBrace(_lBrace_);
+    public AAltTransform()
+    {
+        // Constructor
+    }
 
+    public AAltTransform(
+          TLBrace _lBrace_,
+          List<PTerm> _terms_,
+          TRBrace _rBrace_)
     {
-      this._terms_.clear();
-      this._terms_.addAll(_terms_);
+        // Constructor
+        setLBrace(_lBrace_);
+
+        setTerms(_terms_);
+
+        setRBrace(_rBrace_);
+
     }
 
-    setRBrace(_rBrace_);
-
-  }
-  public Object clone()
-  {
-    return new AAltTransform(
-             (TLBrace) cloneNode(_lBrace_),
-             cloneList(_terms_),
-             (TRBrace) cloneNode(_rBrace_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAAltTransform(this);
-  }
-
-  public TLBrace getLBrace()
-  {
-    return _lBrace_;
-  }
-
-  public void setLBrace(TLBrace node)
-  {
-    if(_lBrace_ != null)
+    @Override
+    public Object clone()
     {
-      _lBrace_.parent(null);
+        return new AAltTransform(
+            cloneNode(this._lBrace_),
+            cloneList(this._terms_),
+            cloneNode(this._rBrace_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        ((Analysis) sw).caseAAltTransform(this);
+    }
 
-      node.parent(this);
+    public TLBrace getLBrace()
+    {
+        return this._lBrace_;
     }
 
-    _lBrace_ = node;
-  }
+    public void setLBrace(TLBrace node)
+    {
+        if(this._lBrace_ != null)
+        {
+            this._lBrace_.parent(null);
+        }
 
-  public LinkedList getTerms()
-  {
-    return _terms_;
-  }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-  public void setTerms(List list)
-  {
-    _terms_.clear();
-    _terms_.addAll(list);
-  }
+            node.parent(this);
+        }
 
-  public TRBrace getRBrace()
-  {
-    return _rBrace_;
-  }
+        this._lBrace_ = node;
+    }
 
-  public void setRBrace(TRBrace node)
-  {
-    if(_rBrace_ != null)
+    public LinkedList<PTerm> getTerms()
     {
-      _rBrace_.parent(null);
+        return this._terms_;
     }
 
-    if(node != null)
+    public void setTerms(List<PTerm> list)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        this._terms_.clear();
+        this._terms_.addAll(list);
+        for(PTerm e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-      node.parent(this);
+            e.parent(this);
+        }
     }
 
-    _rBrace_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_lBrace_)
-           + toString(_terms_)
-           + toString(_rBrace_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_lBrace_ == child)
+    public TRBrace getRBrace()
     {
-      _lBrace_ = null;
-      return;
+        return this._rBrace_;
     }
 
-    if(_terms_.remove(child))
+    public void setRBrace(TRBrace node)
     {
-      return;
-    }
+        if(this._rBrace_ != null)
+        {
+            this._rBrace_.parent(null);
+        }
 
-    if(_rBrace_ == child)
-    {
-      _rBrace_ = null;
-      return;
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-  }
+            node.parent(this);
+        }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_lBrace_ == oldChild)
+        this._rBrace_ = node;
+    }
+
+    @Override
+    public String toString()
     {
-      setLBrace((TLBrace) newChild);
-      return;
+        return ""
+            + toString(this._lBrace_)
+            + toString(this._terms_)
+            + toString(this._rBrace_);
     }
 
-    for(ListIterator i = _terms_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._lBrace_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._lBrace_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._terms_.remove(child))
+        {
+            return;
+        }
 
-    if(_rBrace_ == oldChild)
-    {
-      setRBrace((TRBrace) newChild);
-      return;
-    }
+        if(this._rBrace_ == child)
+        {
+            this._rBrace_ = null;
+            return;
+        }
 
-  }
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class Terms_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PTerm node = (PTerm) o;
+        // Replace child
+        if(this._lBrace_ == oldChild)
+        {
+            setLBrace((TLBrace) newChild);
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AAltTransform.this))
-      {
-        node.parent().removeChild(node);
-      }
+        for(ListIterator<PTerm> i = this._terms_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PTerm) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AAltTransform.this))
-      {
-        node.parent(AAltTransform.this);
-      }
+        if(this._rBrace_ == oldChild)
+        {
+            setRBrace((TRBrace) newChild);
+            return;
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index a7b682bfbaa84aa6f8d6a0611a1045d4c5448b57..f324a73daf48f7c1c234784cf4b3c2a378d8eda7 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AAst extends PAst
 {
-  private final LinkedList _prods_ = new TypedLinkedList(new Prods_Cast());
+    private final LinkedList<PAstProd> _prods_ = new LinkedList<PAstProd>();
+
+    public AAst()
+    {
+        // Constructor
+    }
+
+    public AAst(
+          List<PAstProd> _prods_)
+    {
+        // Constructor
+        setProds(_prods_);
 
-  public AAst()
-  {}
+    }
 
-  public AAst(
-    List _prods_)
-  {
+    @Override
+    public Object clone()
     {
-      this._prods_.clear();
-      this._prods_.addAll(_prods_);
+        return new AAst(
+            cloneList(this._prods_));
     }
 
-  }
-  public Object clone()
-  {
-    return new AAst(
-             cloneList(_prods_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAAst(this);
-  }
-
-  public LinkedList getProds()
-  {
-    return _prods_;
-  }
-
-  public void setProds(List list)
-  {
-    _prods_.clear();
-    _prods_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_prods_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_prods_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseAAst(this);
     }
 
-  }
+    public LinkedList<PAstProd> getProds()
+    {
+        return this._prods_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _prods_.listIterator(); i.hasNext();)
+    public void setProds(List<PAstProd> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._prods_.clear();
+        this._prods_.addAll(list);
+        for(PAstProd e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._prods_);
+    }
 
-  private class Prods_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      PAstProd node = (PAstProd) o;
+        // Remove child
+        if(this._prods_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AAst.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != AAst.this))
-      {
-        node.parent(AAst.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<PAstProd> i = this._prods_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PAstProd) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index d47495f01ffd41e1fde80c0b7c005e54afcbc1c4..3f75eb8ba433012a9d58dd100b7a0135b2de52e0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -5,142 +5,140 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AAstAlt extends PAstAlt
 {
-  private TId _altName_;
-  private final LinkedList _elems_ = new TypedLinkedList(new Elems_Cast());
-
-  public AAstAlt()
-  {}
+    private TId _altName_;
+    private final LinkedList<PElem> _elems_ = new LinkedList<PElem>();
 
-  public AAstAlt(
-    TId _altName_,
-    List _elems_)
-  {
-    setAltName(_altName_);
+    public AAstAlt()
+    {
+        // Constructor
+    }
 
+    public AAstAlt(
+          TId _altName_,
+          List<PElem> _elems_)
     {
-      this._elems_.clear();
-      this._elems_.addAll(_elems_);
+        // Constructor
+        setAltName(_altName_);
+
+        setElems(_elems_);
+
     }
 
-  }
-  public Object clone()
-  {
-    return new AAstAlt(
-             (TId) cloneNode(_altName_),
-             cloneList(_elems_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAAstAlt(this);
-  }
-
-  public TId getAltName()
-  {
-    return _altName_;
-  }
-
-  public void setAltName(TId node)
-  {
-    if(_altName_ != null)
+    @Override
+    public Object clone()
     {
-      _altName_.parent(null);
+        return new AAstAlt(
+            cloneNode(this._altName_),
+            cloneList(this._elems_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        ((Analysis) sw).caseAAstAlt(this);
+    }
 
-      node.parent(this);
+    public TId getAltName()
+    {
+        return this._altName_;
     }
 
-    _altName_ = node;
-  }
-
-  public LinkedList getElems()
-  {
-    return _elems_;
-  }
-
-  public void setElems(List list)
-  {
-    _elems_.clear();
-    _elems_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_altName_)
-           + toString(_elems_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_altName_ == child)
+    public void setAltName(TId node)
     {
-      _altName_ = null;
-      return;
+        if(this._altName_ != null)
+        {
+            this._altName_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._altName_ = node;
     }
 
-    if(_elems_.remove(child))
+    public LinkedList<PElem> getElems()
     {
-      return;
+        return this._elems_;
     }
 
-  }
+    public void setElems(List<PElem> list)
+    {
+        this._elems_.clear();
+        this._elems_.addAll(list);
+        for(PElem e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_altName_ == oldChild)
+            e.parent(this);
+        }
+    }
+
+    @Override
+    public String toString()
     {
-      setAltName((TId) newChild);
-      return;
+        return ""
+            + toString(this._altName_)
+            + toString(this._elems_);
     }
 
-    for(ListIterator i = _elems_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._altName_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._altName_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._elems_.remove(child))
+        {
+            return;
+        }
 
-  }
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class Elems_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PElem node = (PElem) o;
-
-      if((node.parent() != null) &&
-          (node.parent() != AAstAlt.this))
-      {
-        node.parent().removeChild(node);
-      }
+        // Replace child
+        if(this._altName_ == oldChild)
+        {
+            setAltName((TId) newChild);
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AAstAlt.this))
-      {
-        node.parent(AAstAlt.this);
-      }
+        for(ListIterator<PElem> i = this._elems_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PElem) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index 85ee56f6757ea068df17aa367c2848be04ef90ef..902d942e23c5656a418e3cd92ed4888a607e5eb2 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -5,142 +5,140 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AAstProd extends PAstProd
 {
-  private TId _id_;
-  private final LinkedList _alts_ = new TypedLinkedList(new Alts_Cast());
-
-  public AAstProd()
-  {}
+    private TId _id_;
+    private final LinkedList<PAstAlt> _alts_ = new LinkedList<PAstAlt>();
 
-  public AAstProd(
-    TId _id_,
-    List _alts_)
-  {
-    setId(_id_);
+    public AAstProd()
+    {
+        // Constructor
+    }
 
+    public AAstProd(
+          TId _id_,
+          List<PAstAlt> _alts_)
     {
-      this._alts_.clear();
-      this._alts_.addAll(_alts_);
+        // Constructor
+        setId(_id_);
+
+        setAlts(_alts_);
+
     }
 
-  }
-  public Object clone()
-  {
-    return new AAstProd(
-             (TId) cloneNode(_id_),
-             cloneList(_alts_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAAstProd(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    @Override
+    public Object clone()
     {
-      _id_.parent(null);
+        return new AAstProd(
+            cloneNode(this._id_),
+            cloneList(this._alts_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        ((Analysis) sw).caseAAstProd(this);
+    }
 
-      node.parent(this);
+    public TId getId()
+    {
+        return this._id_;
     }
 
-    _id_ = node;
-  }
-
-  public LinkedList getAlts()
-  {
-    return _alts_;
-  }
-
-  public void setAlts(List list)
-  {
-    _alts_.clear();
-    _alts_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_id_)
-           + toString(_alts_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
+    public void setId(TId node)
     {
-      _id_ = null;
-      return;
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    if(_alts_.remove(child))
+    public LinkedList<PAstAlt> getAlts()
     {
-      return;
+        return this._alts_;
     }
 
-  }
+    public void setAlts(List<PAstAlt> list)
+    {
+        this._alts_.clear();
+        this._alts_.addAll(list);
+        for(PAstAlt e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
+            e.parent(this);
+        }
+    }
+
+    @Override
+    public String toString()
     {
-      setId((TId) newChild);
-      return;
+        return ""
+            + toString(this._id_)
+            + toString(this._alts_);
     }
 
-    for(ListIterator i = _alts_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._id_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._id_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._alts_.remove(child))
+        {
+            return;
+        }
 
-  }
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class Alts_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PAstAlt node = (PAstAlt) o;
-
-      if((node.parent() != null) &&
-          (node.parent() != AAstProd.this))
-      {
-        node.parent().removeChild(node);
-      }
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AAstProd.this))
-      {
-        node.parent(AAstProd.this);
-      }
+        for(ListIterator<PAstAlt> i = this._alts_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PAstAlt) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
index e0c320a4c6a570caa843bb7f82aa552cb41e0627..82952c061a42b97aecd2c5fb12a87fa10f3c7f86 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ACharBasic extends PBasic
 {
-  private PChar _char_;
-
-  public ACharBasic()
-  {}
-
-  public ACharBasic(
-    PChar _char_)
-  {
-    setChar(_char_);
-
-  }
-  public Object clone()
-  {
-    return new ACharBasic(
-             (PChar) cloneNode(_char_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseACharBasic(this);
-  }
-
-  public PChar getChar()
-  {
-    return _char_;
-  }
-
-  public void setChar(PChar node)
-  {
-    if(_char_ != null)
+    private PChar _char_;
+
+    public ACharBasic()
     {
-      _char_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ACharBasic(
+          PChar _char_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setChar(_char_);
 
-      node.parent(this);
     }
 
-    _char_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new ACharBasic(
+            cloneNode(this._char_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_char_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseACharBasic(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_char_ == child)
+    public PChar getChar()
     {
-      _char_ = null;
-      return;
+        return this._char_;
     }
 
-  }
+    public void setChar(PChar node)
+    {
+        if(this._char_ != null)
+        {
+            this._char_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._char_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._char_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_char_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setChar((PChar) newChild);
-      return;
+        // Remove child
+        if(this._char_ == child)
+        {
+            this._char_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._char_ == oldChild)
+        {
+            setChar((PChar) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharChar.java b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
index e7cd222435b6bd1f3cf3f63fa7e9371dad025b29..f0aabef0254bf92ac886ba082c2c26db02b7cdf3 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ACharChar extends PChar
 {
-  private TChar _char_;
-
-  public ACharChar()
-  {}
-
-  public ACharChar(
-    TChar _char_)
-  {
-    setChar(_char_);
-
-  }
-  public Object clone()
-  {
-    return new ACharChar(
-             (TChar) cloneNode(_char_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseACharChar(this);
-  }
-
-  public TChar getChar()
-  {
-    return _char_;
-  }
-
-  public void setChar(TChar node)
-  {
-    if(_char_ != null)
+    private TChar _char_;
+
+    public ACharChar()
     {
-      _char_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ACharChar(
+          TChar _char_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setChar(_char_);
 
-      node.parent(this);
     }
 
-    _char_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new ACharChar(
+            cloneNode(this._char_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_char_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseACharChar(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_char_ == child)
+    public TChar getChar()
     {
-      _char_ = null;
-      return;
+        return this._char_;
     }
 
-  }
+    public void setChar(TChar node)
+    {
+        if(this._char_ != null)
+        {
+            this._char_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._char_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._char_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_char_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setChar((TChar) newChild);
-      return;
+        // Remove child
+        if(this._char_ == child)
+        {
+            this._char_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._char_ == oldChild)
+        {
+            setChar((TChar) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 41a8d0b871da0b6923eaa709b7c7ffd7d8ac501e..328986fb34432eba0d54d06c50839b1b1243253f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AConcat extends PConcat
 {
-  private final LinkedList _unExps_ = new TypedLinkedList(new UnExps_Cast());
+    private final LinkedList<PUnExp> _unExps_ = new LinkedList<PUnExp>();
+
+    public AConcat()
+    {
+        // Constructor
+    }
+
+    public AConcat(
+          List<PUnExp> _unExps_)
+    {
+        // Constructor
+        setUnExps(_unExps_);
 
-  public AConcat()
-  {}
+    }
 
-  public AConcat(
-    List _unExps_)
-  {
+    @Override
+    public Object clone()
     {
-      this._unExps_.clear();
-      this._unExps_.addAll(_unExps_);
+        return new AConcat(
+            cloneList(this._unExps_));
     }
 
-  }
-  public Object clone()
-  {
-    return new AConcat(
-             cloneList(_unExps_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAConcat(this);
-  }
-
-  public LinkedList getUnExps()
-  {
-    return _unExps_;
-  }
-
-  public void setUnExps(List list)
-  {
-    _unExps_.clear();
-    _unExps_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_unExps_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_unExps_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseAConcat(this);
     }
 
-  }
+    public LinkedList<PUnExp> getUnExps()
+    {
+        return this._unExps_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _unExps_.listIterator(); i.hasNext();)
+    public void setUnExps(List<PUnExp> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._unExps_.clear();
+        this._unExps_.addAll(list);
+        for(PUnExp e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._unExps_);
+    }
 
-  private class UnExps_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      PUnExp node = (PUnExp) o;
+        // Remove child
+        if(this._unExps_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AConcat.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != AConcat.this))
-      {
-        node.parent(AConcat.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<PUnExp> i = this._unExps_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PUnExp) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ADecChar.java b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
index 6807187fd1618b45fc2026557ac652209990422f..fbfed10cfc0bf2f2969540bbd87d2a8824fd8b4e 100644
--- a/src/main/java/org/sablecc/sablecc/node/ADecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ADecChar extends PChar
 {
-  private TDecChar _decChar_;
-
-  public ADecChar()
-  {}
-
-  public ADecChar(
-    TDecChar _decChar_)
-  {
-    setDecChar(_decChar_);
-
-  }
-  public Object clone()
-  {
-    return new ADecChar(
-             (TDecChar) cloneNode(_decChar_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseADecChar(this);
-  }
-
-  public TDecChar getDecChar()
-  {
-    return _decChar_;
-  }
-
-  public void setDecChar(TDecChar node)
-  {
-    if(_decChar_ != null)
+    private TDecChar _decChar_;
+
+    public ADecChar()
     {
-      _decChar_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ADecChar(
+          TDecChar _decChar_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setDecChar(_decChar_);
 
-      node.parent(this);
     }
 
-    _decChar_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new ADecChar(
+            cloneNode(this._decChar_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_decChar_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseADecChar(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_decChar_ == child)
+    public TDecChar getDecChar()
     {
-      _decChar_ = null;
-      return;
+        return this._decChar_;
     }
 
-  }
+    public void setDecChar(TDecChar node)
+    {
+        if(this._decChar_ != null)
+        {
+            this._decChar_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._decChar_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._decChar_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_decChar_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setDecChar((TDecChar) newChild);
-      return;
+        // Remove child
+        if(this._decChar_ == child)
+        {
+            this._decChar_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._decChar_ == oldChild)
+        {
+            setDecChar((TDecChar) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AElem.java b/src/main/java/org/sablecc/sablecc/node/AElem.java
index 891d0b6d5b006384394a72f151fdcd9d6f92063c..a0442c5d5316122ee24eef99286b6fe9638f6b1f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/AElem.java
@@ -2,210 +2,222 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AElem extends PElem
 {
-  private TId _elemName_;
-  private PSpecifier _specifier_;
-  private TId _id_;
-  private PUnOp _unOp_;
-
-  public AElem()
-  {}
-
-  public AElem(
-    TId _elemName_,
-    PSpecifier _specifier_,
-    TId _id_,
-    PUnOp _unOp_)
-  {
-    setElemName(_elemName_);
-
-    setSpecifier(_specifier_);
-
-    setId(_id_);
-
-    setUnOp(_unOp_);
-
-  }
-  public Object clone()
-  {
-    return new AElem(
-             (TId) cloneNode(_elemName_),
-             (PSpecifier) cloneNode(_specifier_),
-             (TId) cloneNode(_id_),
-             (PUnOp) cloneNode(_unOp_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAElem(this);
-  }
-
-  public TId getElemName()
-  {
-    return _elemName_;
-  }
-
-  public void setElemName(TId node)
-  {
-    if(_elemName_ != null)
+    private TId _elemName_;
+    private PSpecifier _specifier_;
+    private TId _id_;
+    private PUnOp _unOp_;
+
+    public AElem()
     {
-      _elemName_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AElem(
+          TId _elemName_,
+          PSpecifier _specifier_,
+          TId _id_,
+          PUnOp _unOp_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setElemName(_elemName_);
 
-      node.parent(this);
-    }
+        setSpecifier(_specifier_);
 
-    _elemName_ = node;
-  }
+        setId(_id_);
 
-  public PSpecifier getSpecifier()
-  {
-    return _specifier_;
-  }
+        setUnOp(_unOp_);
 
-  public void setSpecifier(PSpecifier node)
-  {
-    if(_specifier_ != null)
-    {
-      _specifier_.parent(null);
     }
 
-    if(node != null)
+    @Override
+    public Object clone()
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        return new AElem(
+            cloneNode(this._elemName_),
+            cloneNode(this._specifier_),
+            cloneNode(this._id_),
+            cloneNode(this._unOp_));
     }
 
-    _specifier_ = node;
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAElem(this);
+    }
 
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    public TId getElemName()
     {
-      _id_.parent(null);
+        return this._elemName_;
     }
 
-    if(node != null)
+    public void setElemName(TId node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._elemName_ != null)
+        {
+            this._elemName_.parent(null);
+        }
 
-      node.parent(this);
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-    _id_ = node;
-  }
+            node.parent(this);
+        }
 
-  public PUnOp getUnOp()
-  {
-    return _unOp_;
-  }
+        this._elemName_ = node;
+    }
 
-  public void setUnOp(PUnOp node)
-  {
-    if(_unOp_ != null)
+    public PSpecifier getSpecifier()
     {
-      _unOp_.parent(null);
+        return this._specifier_;
     }
 
-    if(node != null)
+    public void setSpecifier(PSpecifier node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._specifier_ != null)
+        {
+            this._specifier_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-      node.parent(this);
+            node.parent(this);
+        }
+
+        this._specifier_ = node;
     }
 
-    _unOp_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_elemName_)
-           + toString(_specifier_)
-           + toString(_id_)
-           + toString(_unOp_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_elemName_ == child)
+    public TId getId()
     {
-      _elemName_ = null;
-      return;
+        return this._id_;
     }
 
-    if(_specifier_ == child)
+    public void setId(TId node)
     {
-      _specifier_ = null;
-      return;
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    if(_id_ == child)
+    public PUnOp getUnOp()
     {
-      _id_ = null;
-      return;
+        return this._unOp_;
     }
 
-    if(_unOp_ == child)
+    public void setUnOp(PUnOp node)
     {
-      _unOp_ = null;
-      return;
-    }
+        if(this._unOp_ != null)
+        {
+            this._unOp_.parent(null);
+        }
 
-  }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_elemName_ == oldChild)
-    {
-      setElemName((TId) newChild);
-      return;
+            node.parent(this);
+        }
+
+        this._unOp_ = node;
     }
 
-    if(_specifier_ == oldChild)
+    @Override
+    public String toString()
     {
-      setSpecifier((PSpecifier) newChild);
-      return;
+        return ""
+            + toString(this._elemName_)
+            + toString(this._specifier_)
+            + toString(this._id_)
+            + toString(this._unOp_);
     }
 
-    if(_id_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setId((TId) newChild);
-      return;
+        // Remove child
+        if(this._elemName_ == child)
+        {
+            this._elemName_ = null;
+            return;
+        }
+
+        if(this._specifier_ == child)
+        {
+            this._specifier_ = null;
+            return;
+        }
+
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        if(this._unOp_ == child)
+        {
+            this._unOp_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-    if(_unOp_ == oldChild)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      setUnOp((PUnOp) newChild);
-      return;
-    }
+        // Replace child
+        if(this._elemName_ == oldChild)
+        {
+            setElemName((TId) newChild);
+            return;
+        }
+
+        if(this._specifier_ == oldChild)
+        {
+            setSpecifier((PSpecifier) newChild);
+            return;
+        }
 
-  }
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._unOp_ == oldChild)
+        {
+            setUnOp((PUnOp) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index c8b4fb302c10164703ac6c0ca6a3fa0a4573330a..8da0a7c6c7e21f930f28099621c5509f1fb8777f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -5,357 +5,355 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AGrammar extends PGrammar
 {
-  private final LinkedList _package_ = new TypedLinkedList(new Package_Cast());
-  private PHelpers _helpers_;
-  private PStates _states_;
-  private PTokens _tokens_;
-  private PIgnTokens _ignTokens_;
-  private PProductions _productions_;
-  private PAst _ast_;
-
-  public AGrammar()
-  {}
-
-  public AGrammar(
-    List _package_,
-    PHelpers _helpers_,
-    PStates _states_,
-    PTokens _tokens_,
-    PIgnTokens _ignTokens_,
-    PProductions _productions_,
-    PAst _ast_)
-  {
+    private final LinkedList<TPkgId> _package_ = new LinkedList<TPkgId>();
+    private PHelpers _helpers_;
+    private PStates _states_;
+    private PTokens _tokens_;
+    private PIgnTokens _ignTokens_;
+    private PProductions _productions_;
+    private PAst _ast_;
+
+    public AGrammar()
     {
-      this._package_.clear();
-      this._package_.addAll(_package_);
+        // Constructor
     }
 
-    setHelpers(_helpers_);
-
-    setStates(_states_);
-
-    setTokens(_tokens_);
-
-    setIgnTokens(_ignTokens_);
+    public AGrammar(
+          List<TPkgId> _package_,
+          PHelpers _helpers_,
+          PStates _states_,
+          PTokens _tokens_,
+          PIgnTokens _ignTokens_,
+          PProductions _productions_,
+          PAst _ast_)
+    {
+        // Constructor
+        setPackage(_package_);
 
-    setProductions(_productions_);
+        setHelpers(_helpers_);
 
-    setAst(_ast_);
+        setStates(_states_);
 
-  }
-  public Object clone()
-  {
-    return new AGrammar(
-             cloneList(_package_),
-             (PHelpers) cloneNode(_helpers_),
-             (PStates) cloneNode(_states_),
-             (PTokens) cloneNode(_tokens_),
-             (PIgnTokens) cloneNode(_ignTokens_),
-             (PProductions) cloneNode(_productions_),
-             (PAst) cloneNode(_ast_));
-  }
+        setTokens(_tokens_);
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAGrammar(this);
-  }
+        setIgnTokens(_ignTokens_);
 
-  public LinkedList getPackage()
-  {
-    return _package_;
-  }
+        setProductions(_productions_);
 
-  public void setPackage(List list)
-  {
-    _package_.clear();
-    _package_.addAll(list);
-  }
+        setAst(_ast_);
 
-  public PHelpers getHelpers()
-  {
-    return _helpers_;
-  }
+    }
 
-  public void setHelpers(PHelpers node)
-  {
-    if(_helpers_ != null)
+    @Override
+    public Object clone()
     {
-      _helpers_.parent(null);
+        return new AGrammar(
+            cloneList(this._package_),
+            cloneNode(this._helpers_),
+            cloneNode(this._states_),
+            cloneNode(this._tokens_),
+            cloneNode(this._ignTokens_),
+            cloneNode(this._productions_),
+            cloneNode(this._ast_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAGrammar(this);
     }
 
-    _helpers_ = node;
-  }
-
-  public PStates getStates()
-  {
-    return _states_;
-  }
-
-  public void setStates(PStates node)
-  {
-    if(_states_ != null)
+    public LinkedList<TPkgId> getPackage()
     {
-      _states_.parent(null);
+        return this._package_;
     }
 
-    if(node != null)
+    public void setPackage(List<TPkgId> list)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        this._package_.clear();
+        this._package_.addAll(list);
+        for(TPkgId e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-      node.parent(this);
+            e.parent(this);
+        }
     }
 
-    _states_ = node;
-  }
-
-  public PTokens getTokens()
-  {
-    return _tokens_;
-  }
-
-  public void setTokens(PTokens node)
-  {
-    if(_tokens_ != null)
+    public PHelpers getHelpers()
     {
-      _tokens_.parent(null);
+        return this._helpers_;
     }
 
-    if(node != null)
+    public void setHelpers(PHelpers node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._helpers_ != null)
+        {
+            this._helpers_.parent(null);
+        }
 
-      node.parent(this);
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-    _tokens_ = node;
-  }
+            node.parent(this);
+        }
 
-  public PIgnTokens getIgnTokens()
-  {
-    return _ignTokens_;
-  }
+        this._helpers_ = node;
+    }
 
-  public void setIgnTokens(PIgnTokens node)
-  {
-    if(_ignTokens_ != null)
+    public PStates getStates()
     {
-      _ignTokens_.parent(null);
+        return this._states_;
     }
 
-    if(node != null)
+    public void setStates(PStates node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._states_ != null)
+        {
+            this._states_.parent(null);
+        }
 
-      node.parent(this);
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-    _ignTokens_ = node;
-  }
+            node.parent(this);
+        }
 
-  public PProductions getProductions()
-  {
-    return _productions_;
-  }
+        this._states_ = node;
+    }
 
-  public void setProductions(PProductions node)
-  {
-    if(_productions_ != null)
+    public PTokens getTokens()
     {
-      _productions_.parent(null);
+        return this._tokens_;
     }
 
-    if(node != null)
+    public void setTokens(PTokens node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._tokens_ != null)
+        {
+            this._tokens_.parent(null);
+        }
 
-      node.parent(this);
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-    _productions_ = node;
-  }
+            node.parent(this);
+        }
 
-  public PAst getAst()
-  {
-    return _ast_;
-  }
+        this._tokens_ = node;
+    }
 
-  public void setAst(PAst node)
-  {
-    if(_ast_ != null)
+    public PIgnTokens getIgnTokens()
     {
-      _ast_.parent(null);
+        return this._ignTokens_;
     }
 
-    if(node != null)
+    public void setIgnTokens(PIgnTokens node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._ignTokens_ != null)
+        {
+            this._ignTokens_.parent(null);
+        }
 
-      node.parent(this);
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-    _ast_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_package_)
-           + toString(_helpers_)
-           + toString(_states_)
-           + toString(_tokens_)
-           + toString(_ignTokens_)
-           + toString(_productions_)
-           + toString(_ast_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_package_.remove(child))
-    {
-      return;
+            node.parent(this);
+        }
+
+        this._ignTokens_ = node;
     }
 
-    if(_helpers_ == child)
+    public PProductions getProductions()
     {
-      _helpers_ = null;
-      return;
+        return this._productions_;
     }
 
-    if(_states_ == child)
+    public void setProductions(PProductions node)
     {
-      _states_ = null;
-      return;
+        if(this._productions_ != null)
+        {
+            this._productions_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._productions_ = node;
     }
 
-    if(_tokens_ == child)
+    public PAst getAst()
     {
-      _tokens_ = null;
-      return;
+        return this._ast_;
     }
 
-    if(_ignTokens_ == child)
+    public void setAst(PAst node)
     {
-      _ignTokens_ = null;
-      return;
+        if(this._ast_ != null)
+        {
+            this._ast_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._ast_ = node;
     }
 
-    if(_productions_ == child)
+    @Override
+    public String toString()
     {
-      _productions_ = null;
-      return;
+        return ""
+            + toString(this._package_)
+            + toString(this._helpers_)
+            + toString(this._states_)
+            + toString(this._tokens_)
+            + toString(this._ignTokens_)
+            + toString(this._productions_)
+            + toString(this._ast_);
     }
 
-    if(_ast_ == child)
+    @Override
+    void removeChild(  Node child)
     {
-      _ast_ = null;
-      return;
-    }
+        // Remove child
+        if(this._package_.remove(child))
+        {
+            return;
+        }
 
-  }
+        if(this._helpers_ == child)
+        {
+            this._helpers_ = null;
+            return;
+        }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _package_.listIterator(); i.hasNext();)
-    {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        if(this._states_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._states_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._tokens_ == child)
+        {
+            this._tokens_ = null;
+            return;
+        }
 
-    if(_helpers_ == oldChild)
-    {
-      setHelpers((PHelpers) newChild);
-      return;
-    }
+        if(this._ignTokens_ == child)
+        {
+            this._ignTokens_ = null;
+            return;
+        }
 
-    if(_states_ == oldChild)
-    {
-      setStates((PStates) newChild);
-      return;
-    }
+        if(this._productions_ == child)
+        {
+            this._productions_ = null;
+            return;
+        }
 
-    if(_tokens_ == oldChild)
-    {
-      setTokens((PTokens) newChild);
-      return;
-    }
+        if(this._ast_ == child)
+        {
+            this._ast_ = null;
+            return;
+        }
 
-    if(_ignTokens_ == oldChild)
-    {
-      setIgnTokens((PIgnTokens) newChild);
-      return;
+        throw new RuntimeException("Not a child.");
     }
 
-    if(_productions_ == oldChild)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      setProductions((PProductions) newChild);
-      return;
-    }
+        // Replace child
+        for(ListIterator<TPkgId> i = this._package_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((TPkgId) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-    if(_ast_ == oldChild)
-    {
-      setAst((PAst) newChild);
-      return;
-    }
+        if(this._helpers_ == oldChild)
+        {
+            setHelpers((PHelpers) newChild);
+            return;
+        }
 
-  }
+        if(this._states_ == oldChild)
+        {
+            setStates((PStates) newChild);
+            return;
+        }
 
-  private class Package_Cast implements Cast
-  {
-    public Object cast(Object o)
-    {
-      TPkgId node = (TPkgId) o;
+        if(this._tokens_ == oldChild)
+        {
+            setTokens((PTokens) newChild);
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AGrammar.this))
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._ignTokens_ == oldChild)
+        {
+            setIgnTokens((PIgnTokens) newChild);
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AGrammar.this))
-      {
-        node.parent(AGrammar.this);
-      }
+        if(this._productions_ == oldChild)
+        {
+            setProductions((PProductions) newChild);
+            return;
+        }
+
+        if(this._ast_ == oldChild)
+        {
+            setAst((PAst) newChild);
+            return;
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
index d9cff12b336513171cfbf58c78989d60fb1cc799..103dc8152dd063729ab6cf7fea950fe140cda07f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
@@ -2,124 +2,136 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AHelperDef extends PHelperDef
 {
-  private TId _id_;
-  private PRegExp _regExp_;
-
-  public AHelperDef()
-  {}
-
-  public AHelperDef(
-    TId _id_,
-    PRegExp _regExp_)
-  {
-    setId(_id_);
-
-    setRegExp(_regExp_);
-
-  }
-  public Object clone()
-  {
-    return new AHelperDef(
-             (TId) cloneNode(_id_),
-             (PRegExp) cloneNode(_regExp_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAHelperDef(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    private TId _id_;
+    private PRegExp _regExp_;
+
+    public AHelperDef()
     {
-      _id_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AHelperDef(
+          TId _id_,
+          PRegExp _regExp_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
-    }
+        // Constructor
+        setId(_id_);
 
-    _id_ = node;
-  }
+        setRegExp(_regExp_);
 
-  public PRegExp getRegExp()
-  {
-    return _regExp_;
-  }
+    }
 
-  public void setRegExp(PRegExp node)
-  {
-    if(_regExp_ != null)
+    @Override
+    public Object clone()
     {
-      _regExp_.parent(null);
+        return new AHelperDef(
+            cloneNode(this._id_),
+            cloneNode(this._regExp_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAHelperDef(this);
     }
 
-    _regExp_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_id_)
-           + toString(_regExp_);
-  }
+    public TId getId()
+    {
+        return this._id_;
+    }
 
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
+    public void setId(TId node)
     {
-      _id_ = null;
-      return;
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    if(_regExp_ == child)
+    public PRegExp getRegExp()
     {
-      _regExp_ = null;
-      return;
+        return this._regExp_;
     }
 
-  }
+    public void setRegExp(PRegExp node)
+    {
+        if(this._regExp_ != null)
+        {
+            this._regExp_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._regExp_ = node;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
+    @Override
+    public String toString()
     {
-      setId((TId) newChild);
-      return;
+        return ""
+            + toString(this._id_)
+            + toString(this._regExp_);
     }
 
-    if(_regExp_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setRegExp((PRegExp) newChild);
-      return;
+        // Remove child
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        if(this._regExp_ == child)
+        {
+            this._regExp_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._regExp_ == oldChild)
+        {
+            setRegExp((PRegExp) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index 0b9caec600e5c0c2ec2a0d4c407dbf6133eead05..a6ad653cc3b227fea7e297fa3207af4be2930798 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AHelpers extends PHelpers
 {
-  private final LinkedList _helperDefs_ = new TypedLinkedList(new HelperDefs_Cast());
+    private final LinkedList<PHelperDef> _helperDefs_ = new LinkedList<PHelperDef>();
+
+    public AHelpers()
+    {
+        // Constructor
+    }
+
+    public AHelpers(
+          List<PHelperDef> _helperDefs_)
+    {
+        // Constructor
+        setHelperDefs(_helperDefs_);
 
-  public AHelpers()
-  {}
+    }
 
-  public AHelpers(
-    List _helperDefs_)
-  {
+    @Override
+    public Object clone()
     {
-      this._helperDefs_.clear();
-      this._helperDefs_.addAll(_helperDefs_);
+        return new AHelpers(
+            cloneList(this._helperDefs_));
     }
 
-  }
-  public Object clone()
-  {
-    return new AHelpers(
-             cloneList(_helperDefs_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAHelpers(this);
-  }
-
-  public LinkedList getHelperDefs()
-  {
-    return _helperDefs_;
-  }
-
-  public void setHelperDefs(List list)
-  {
-    _helperDefs_.clear();
-    _helperDefs_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_helperDefs_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_helperDefs_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseAHelpers(this);
     }
 
-  }
+    public LinkedList<PHelperDef> getHelperDefs()
+    {
+        return this._helperDefs_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _helperDefs_.listIterator(); i.hasNext();)
+    public void setHelperDefs(List<PHelperDef> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._helperDefs_.clear();
+        this._helperDefs_.addAll(list);
+        for(PHelperDef e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._helperDefs_);
+    }
 
-  private class HelperDefs_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      PHelperDef node = (PHelperDef) o;
+        // Remove child
+        if(this._helperDefs_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AHelpers.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != AHelpers.this))
-      {
-        node.parent(AHelpers.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<PHelperDef> i = this._helperDefs_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PHelperDef) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AHexChar.java b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
index 8d047cff9bd7ba43fee2c85bc8c137280ead16cf..b773d9832e7836535739e3ec62fee6c33c55aedb 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AHexChar extends PChar
 {
-  private THexChar _hexChar_;
-
-  public AHexChar()
-  {}
-
-  public AHexChar(
-    THexChar _hexChar_)
-  {
-    setHexChar(_hexChar_);
-
-  }
-  public Object clone()
-  {
-    return new AHexChar(
-             (THexChar) cloneNode(_hexChar_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAHexChar(this);
-  }
-
-  public THexChar getHexChar()
-  {
-    return _hexChar_;
-  }
-
-  public void setHexChar(THexChar node)
-  {
-    if(_hexChar_ != null)
+    private THexChar _hexChar_;
+
+    public AHexChar()
     {
-      _hexChar_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AHexChar(
+          THexChar _hexChar_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setHexChar(_hexChar_);
 
-      node.parent(this);
     }
 
-    _hexChar_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new AHexChar(
+            cloneNode(this._hexChar_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_hexChar_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAHexChar(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_hexChar_ == child)
+    public THexChar getHexChar()
     {
-      _hexChar_ = null;
-      return;
+        return this._hexChar_;
     }
 
-  }
+    public void setHexChar(THexChar node)
+    {
+        if(this._hexChar_ != null)
+        {
+            this._hexChar_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._hexChar_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._hexChar_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_hexChar_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setHexChar((THexChar) newChild);
-      return;
+        // Remove child
+        if(this._hexChar_ == child)
+        {
+            this._hexChar_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._hexChar_ == oldChild)
+        {
+            setHexChar((THexChar) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
index a3ea1f7ef53b047f3e1d22033875929acd9da4bd..2f93b77a0efc8ac7c59fc01201f6e2c6f3c824f8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AIdBasic extends PBasic
 {
-  private TId _id_;
-
-  public AIdBasic()
-  {}
-
-  public AIdBasic(
-    TId _id_)
-  {
-    setId(_id_);
-
-  }
-  public Object clone()
-  {
-    return new AIdBasic(
-             (TId) cloneNode(_id_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAIdBasic(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    private TId _id_;
+
+    public AIdBasic()
     {
-      _id_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AIdBasic(
+          TId _id_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setId(_id_);
 
-      node.parent(this);
     }
 
-    _id_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new AIdBasic(
+            cloneNode(this._id_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_id_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAIdBasic(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
+    public TId getId()
     {
-      _id_ = null;
-      return;
+        return this._id_;
     }
 
-  }
+    public void setId(TId node)
+    {
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._id_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setId((TId) newChild);
-      return;
+        // Remove child
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index 872eb2718c957c0b7df24a1e8f9c7e0e90b6e026..308ed8b38910efea9b7681f6667bbb257e90f3d7 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AIgnTokens extends PIgnTokens
 {
-  private final LinkedList _listId_ = new TypedLinkedList(new ListId_Cast());
+    private final LinkedList<TId> _listId_ = new LinkedList<TId>();
+
+    public AIgnTokens()
+    {
+        // Constructor
+    }
+
+    public AIgnTokens(
+          List<TId> _listId_)
+    {
+        // Constructor
+        setListId(_listId_);
 
-  public AIgnTokens()
-  {}
+    }
 
-  public AIgnTokens(
-    List _listId_)
-  {
+    @Override
+    public Object clone()
     {
-      this._listId_.clear();
-      this._listId_.addAll(_listId_);
+        return new AIgnTokens(
+            cloneList(this._listId_));
     }
 
-  }
-  public Object clone()
-  {
-    return new AIgnTokens(
-             cloneList(_listId_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAIgnTokens(this);
-  }
-
-  public LinkedList getListId()
-  {
-    return _listId_;
-  }
-
-  public void setListId(List list)
-  {
-    _listId_.clear();
-    _listId_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_listId_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_listId_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseAIgnTokens(this);
     }
 
-  }
+    public LinkedList<TId> getListId()
+    {
+        return this._listId_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _listId_.listIterator(); i.hasNext();)
+    public void setListId(List<TId> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._listId_.clear();
+        this._listId_.addAll(list);
+        for(TId e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._listId_);
+    }
 
-  private class ListId_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      TId node = (TId) o;
+        // Remove child
+        if(this._listId_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AIgnTokens.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != AIgnTokens.this))
-      {
-        node.parent(AIgnTokens.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<TId> i = this._listId_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((TId) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
index d9c40f94616d0813196d1c3326f21b899021c8bf..63bdaedbe12886e662a7afb61144ba3cabc0b596 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
@@ -2,124 +2,136 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AIntervalSet extends PSet
 {
-  private PChar _left_;
-  private PChar _right_;
-
-  public AIntervalSet()
-  {}
-
-  public AIntervalSet(
-    PChar _left_,
-    PChar _right_)
-  {
-    setLeft(_left_);
-
-    setRight(_right_);
-
-  }
-  public Object clone()
-  {
-    return new AIntervalSet(
-             (PChar) cloneNode(_left_),
-             (PChar) cloneNode(_right_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAIntervalSet(this);
-  }
-
-  public PChar getLeft()
-  {
-    return _left_;
-  }
-
-  public void setLeft(PChar node)
-  {
-    if(_left_ != null)
+    private PChar _left_;
+    private PChar _right_;
+
+    public AIntervalSet()
     {
-      _left_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AIntervalSet(
+          PChar _left_,
+          PChar _right_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
-    }
+        // Constructor
+        setLeft(_left_);
 
-    _left_ = node;
-  }
+        setRight(_right_);
 
-  public PChar getRight()
-  {
-    return _right_;
-  }
+    }
 
-  public void setRight(PChar node)
-  {
-    if(_right_ != null)
+    @Override
+    public Object clone()
     {
-      _right_.parent(null);
+        return new AIntervalSet(
+            cloneNode(this._left_),
+            cloneNode(this._right_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAIntervalSet(this);
     }
 
-    _right_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_left_)
-           + toString(_right_);
-  }
+    public PChar getLeft()
+    {
+        return this._left_;
+    }
 
-  void removeChild(Node child)
-  {
-    if(_left_ == child)
+    public void setLeft(PChar node)
     {
-      _left_ = null;
-      return;
+        if(this._left_ != null)
+        {
+            this._left_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._left_ = node;
     }
 
-    if(_right_ == child)
+    public PChar getRight()
     {
-      _right_ = null;
-      return;
+        return this._right_;
     }
 
-  }
+    public void setRight(PChar node)
+    {
+        if(this._right_ != null)
+        {
+            this._right_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._right_ = node;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_left_ == oldChild)
+    @Override
+    public String toString()
     {
-      setLeft((PChar) newChild);
-      return;
+        return ""
+            + toString(this._left_)
+            + toString(this._right_);
     }
 
-    if(_right_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setRight((PChar) newChild);
-      return;
+        // Remove child
+        if(this._left_ == child)
+        {
+            this._left_ = null;
+            return;
+        }
+
+        if(this._right_ == child)
+        {
+            this._right_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._left_ == oldChild)
+        {
+            setLeft((PChar) newChild);
+            return;
+        }
+
+        if(this._right_ == oldChild)
+        {
+            setRight((PChar) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index 7a0a593e5dcd03044756dad400022edd44e179d2..fa01dabe3a5edd7192c20bd5cf849f780f78b50a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -5,142 +5,140 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AListTerm extends PTerm
 {
-  private TLBkt _lBkt_;
-  private final LinkedList _listTerms_ = new TypedLinkedList(new ListTerms_Cast());
-
-  public AListTerm()
-  {}
+    private TLBkt _lBkt_;
+    private final LinkedList<PListTerm> _listTerms_ = new LinkedList<PListTerm>();
 
-  public AListTerm(
-    TLBkt _lBkt_,
-    List _listTerms_)
-  {
-    setLBkt(_lBkt_);
+    public AListTerm()
+    {
+        // Constructor
+    }
 
+    public AListTerm(
+          TLBkt _lBkt_,
+          List<PListTerm> _listTerms_)
     {
-      this._listTerms_.clear();
-      this._listTerms_.addAll(_listTerms_);
+        // Constructor
+        setLBkt(_lBkt_);
+
+        setListTerms(_listTerms_);
+
     }
 
-  }
-  public Object clone()
-  {
-    return new AListTerm(
-             (TLBkt) cloneNode(_lBkt_),
-             cloneList(_listTerms_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAListTerm(this);
-  }
-
-  public TLBkt getLBkt()
-  {
-    return _lBkt_;
-  }
-
-  public void setLBkt(TLBkt node)
-  {
-    if(_lBkt_ != null)
+    @Override
+    public Object clone()
     {
-      _lBkt_.parent(null);
+        return new AListTerm(
+            cloneNode(this._lBkt_),
+            cloneList(this._listTerms_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        ((Analysis) sw).caseAListTerm(this);
+    }
 
-      node.parent(this);
+    public TLBkt getLBkt()
+    {
+        return this._lBkt_;
     }
 
-    _lBkt_ = node;
-  }
-
-  public LinkedList getListTerms()
-  {
-    return _listTerms_;
-  }
-
-  public void setListTerms(List list)
-  {
-    _listTerms_.clear();
-    _listTerms_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_lBkt_)
-           + toString(_listTerms_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_lBkt_ == child)
+    public void setLBkt(TLBkt node)
     {
-      _lBkt_ = null;
-      return;
+        if(this._lBkt_ != null)
+        {
+            this._lBkt_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._lBkt_ = node;
     }
 
-    if(_listTerms_.remove(child))
+    public LinkedList<PListTerm> getListTerms()
     {
-      return;
+        return this._listTerms_;
     }
 
-  }
+    public void setListTerms(List<PListTerm> list)
+    {
+        this._listTerms_.clear();
+        this._listTerms_.addAll(list);
+        for(PListTerm e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_lBkt_ == oldChild)
+            e.parent(this);
+        }
+    }
+
+    @Override
+    public String toString()
     {
-      setLBkt((TLBkt) newChild);
-      return;
+        return ""
+            + toString(this._lBkt_)
+            + toString(this._listTerms_);
     }
 
-    for(ListIterator i = _listTerms_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._lBkt_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._lBkt_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._listTerms_.remove(child))
+        {
+            return;
+        }
 
-  }
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class ListTerms_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PListTerm node = (PListTerm) o;
-
-      if((node.parent() != null) &&
-          (node.parent() != AListTerm.this))
-      {
-        node.parent().removeChild(node);
-      }
+        // Replace child
+        if(this._lBkt_ == oldChild)
+        {
+            setLBkt((TLBkt) newChild);
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AListTerm.this))
-      {
-        node.parent(AListTerm.this);
-      }
+        for(ListIterator<PListTerm> i = this._listTerms_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PListTerm) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
index b79f00560f86241f2d5d9997793e39ece9ac0c03..23a88a678a284b7d6e7915132566a94667c9c5ad 100644
--- a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -2,32 +2,45 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AMinusBinOp extends PBinOp
 {
 
-  public AMinusBinOp()
-  {}
-  public Object clone()
-  {
-    return new AMinusBinOp();
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAMinusBinOp(this);
-  }
-
-  public String toString()
-  {
-    return "";
-  }
-
-  void removeChild(Node child)
-  {}
-
-  void replaceChild(Node oldChild, Node newChild)
-  {}
+    public AMinusBinOp()
+    {
+        // Constructor
+    }
+
+    @Override
+    public Object clone()
+    {
+        return new AMinusBinOp();
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAMinusBinOp(this);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "";
+    }
+
+    @Override
+    void removeChild(  Node child)
+    {
+        // Remove child
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index 82e42e7646b707f99ef3b0780e500fbce6306af8..274ed5ac35906af985f2a2614d4fd454187fe45d 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -5,185 +5,183 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ANewListTerm extends PListTerm
 {
-  private PProdName _prodName_;
-  private TLPar _lPar_;
-  private final LinkedList _params_ = new TypedLinkedList(new Params_Cast());
+    private PProdName _prodName_;
+    private TLPar _lPar_;
+    private final LinkedList<PTerm> _params_ = new LinkedList<PTerm>();
 
-  public ANewListTerm()
-  {}
+    public ANewListTerm()
+    {
+        // Constructor
+    }
 
-  public ANewListTerm(
-    PProdName _prodName_,
-    TLPar _lPar_,
-    List _params_)
-  {
-    setProdName(_prodName_);
+    public ANewListTerm(
+          PProdName _prodName_,
+          TLPar _lPar_,
+          List<PTerm> _params_)
+    {
+        // Constructor
+        setProdName(_prodName_);
 
-    setLPar(_lPar_);
+        setLPar(_lPar_);
+
+        setParams(_params_);
 
-    {
-      this._params_.clear();
-      this._params_.addAll(_params_);
     }
 
-  }
-  public Object clone()
-  {
-    return new ANewListTerm(
-             (PProdName) cloneNode(_prodName_),
-             (TLPar) cloneNode(_lPar_),
-             cloneList(_params_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseANewListTerm(this);
-  }
-
-  public PProdName getProdName()
-  {
-    return _prodName_;
-  }
-
-  public void setProdName(PProdName node)
-  {
-    if(_prodName_ != null)
+    @Override
+    public Object clone()
     {
-      _prodName_.parent(null);
+        return new ANewListTerm(
+            cloneNode(this._prodName_),
+            cloneNode(this._lPar_),
+            cloneList(this._params_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseANewListTerm(this);
     }
 
-    _prodName_ = node;
-  }
-
-  public TLPar getLPar()
-  {
-    return _lPar_;
-  }
-
-  public void setLPar(TLPar node)
-  {
-    if(_lPar_ != null)
+    public PProdName getProdName()
     {
-      _lPar_.parent(null);
+        return this._prodName_;
     }
 
-    if(node != null)
+    public void setProdName(PProdName node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._prodName_ != null)
+        {
+            this._prodName_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
 
-      node.parent(this);
+        this._prodName_ = node;
     }
 
-    _lPar_ = node;
-  }
-
-  public LinkedList getParams()
-  {
-    return _params_;
-  }
-
-  public void setParams(List list)
-  {
-    _params_.clear();
-    _params_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_prodName_)
-           + toString(_lPar_)
-           + toString(_params_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_prodName_ == child)
+    public TLPar getLPar()
     {
-      _prodName_ = null;
-      return;
+        return this._lPar_;
     }
 
-    if(_lPar_ == child)
+    public void setLPar(TLPar node)
     {
-      _lPar_ = null;
-      return;
+        if(this._lPar_ != null)
+        {
+            this._lPar_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._lPar_ = node;
     }
 
-    if(_params_.remove(child))
+    public LinkedList<PTerm> getParams()
     {
-      return;
+        return this._params_;
     }
 
-  }
-
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_prodName_ == oldChild)
+    public void setParams(List<PTerm> list)
     {
-      setProdName((PProdName) newChild);
-      return;
+        this._params_.clear();
+        this._params_.addAll(list);
+        for(PTerm e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
+
+            e.parent(this);
+        }
     }
 
-    if(_lPar_ == oldChild)
+    @Override
+    public String toString()
     {
-      setLPar((TLPar) newChild);
-      return;
+        return ""
+            + toString(this._prodName_)
+            + toString(this._lPar_)
+            + toString(this._params_);
     }
 
-    for(ListIterator i = _params_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._prodName_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._prodName_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._lPar_ == child)
+        {
+            this._lPar_ = null;
+            return;
+        }
 
-  }
+        if(this._params_.remove(child))
+        {
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class Params_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PTerm node = (PTerm) o;
+        // Replace child
+        if(this._prodName_ == oldChild)
+        {
+            setProdName((PProdName) newChild);
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != ANewListTerm.this))
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._lPar_ == oldChild)
+        {
+            setLPar((TLPar) newChild);
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != ANewListTerm.this))
-      {
-        node.parent(ANewListTerm.this);
-      }
+        for(ListIterator<PTerm> i = this._params_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PTerm) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index bf8afbba01a6a9aa8143941e8bcef2e014c84f24..9ed4904fff8bdea8c0eaf5d57ce96bab23424b87 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -5,185 +5,183 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ANewTerm extends PTerm
 {
-  private PProdName _prodName_;
-  private TLPar _lPar_;
-  private final LinkedList _params_ = new TypedLinkedList(new Params_Cast());
+    private PProdName _prodName_;
+    private TLPar _lPar_;
+    private final LinkedList<PTerm> _params_ = new LinkedList<PTerm>();
 
-  public ANewTerm()
-  {}
+    public ANewTerm()
+    {
+        // Constructor
+    }
 
-  public ANewTerm(
-    PProdName _prodName_,
-    TLPar _lPar_,
-    List _params_)
-  {
-    setProdName(_prodName_);
+    public ANewTerm(
+          PProdName _prodName_,
+          TLPar _lPar_,
+          List<PTerm> _params_)
+    {
+        // Constructor
+        setProdName(_prodName_);
 
-    setLPar(_lPar_);
+        setLPar(_lPar_);
+
+        setParams(_params_);
 
-    {
-      this._params_.clear();
-      this._params_.addAll(_params_);
     }
 
-  }
-  public Object clone()
-  {
-    return new ANewTerm(
-             (PProdName) cloneNode(_prodName_),
-             (TLPar) cloneNode(_lPar_),
-             cloneList(_params_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseANewTerm(this);
-  }
-
-  public PProdName getProdName()
-  {
-    return _prodName_;
-  }
-
-  public void setProdName(PProdName node)
-  {
-    if(_prodName_ != null)
+    @Override
+    public Object clone()
     {
-      _prodName_.parent(null);
+        return new ANewTerm(
+            cloneNode(this._prodName_),
+            cloneNode(this._lPar_),
+            cloneList(this._params_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseANewTerm(this);
     }
 
-    _prodName_ = node;
-  }
-
-  public TLPar getLPar()
-  {
-    return _lPar_;
-  }
-
-  public void setLPar(TLPar node)
-  {
-    if(_lPar_ != null)
+    public PProdName getProdName()
     {
-      _lPar_.parent(null);
+        return this._prodName_;
     }
 
-    if(node != null)
+    public void setProdName(PProdName node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._prodName_ != null)
+        {
+            this._prodName_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
 
-      node.parent(this);
+        this._prodName_ = node;
     }
 
-    _lPar_ = node;
-  }
-
-  public LinkedList getParams()
-  {
-    return _params_;
-  }
-
-  public void setParams(List list)
-  {
-    _params_.clear();
-    _params_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_prodName_)
-           + toString(_lPar_)
-           + toString(_params_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_prodName_ == child)
+    public TLPar getLPar()
     {
-      _prodName_ = null;
-      return;
+        return this._lPar_;
     }
 
-    if(_lPar_ == child)
+    public void setLPar(TLPar node)
     {
-      _lPar_ = null;
-      return;
+        if(this._lPar_ != null)
+        {
+            this._lPar_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._lPar_ = node;
     }
 
-    if(_params_.remove(child))
+    public LinkedList<PTerm> getParams()
     {
-      return;
+        return this._params_;
     }
 
-  }
-
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_prodName_ == oldChild)
+    public void setParams(List<PTerm> list)
     {
-      setProdName((PProdName) newChild);
-      return;
+        this._params_.clear();
+        this._params_.addAll(list);
+        for(PTerm e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
+
+            e.parent(this);
+        }
     }
 
-    if(_lPar_ == oldChild)
+    @Override
+    public String toString()
     {
-      setLPar((TLPar) newChild);
-      return;
+        return ""
+            + toString(this._prodName_)
+            + toString(this._lPar_)
+            + toString(this._params_);
     }
 
-    for(ListIterator i = _params_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._prodName_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._prodName_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._lPar_ == child)
+        {
+            this._lPar_ = null;
+            return;
+        }
 
-  }
+        if(this._params_.remove(child))
+        {
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class Params_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PTerm node = (PTerm) o;
+        // Replace child
+        if(this._prodName_ == oldChild)
+        {
+            setProdName((PProdName) newChild);
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != ANewTerm.this))
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._lPar_ == oldChild)
+        {
+            setLPar((TLPar) newChild);
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != ANewTerm.this))
-      {
-        node.parent(ANewTerm.this);
-      }
+        for(ListIterator<PTerm> i = this._params_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PTerm) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
index cc08054808aad00e52ae84f82803989ad13df4fc..ef7b50e44d8dacebbc4caab6b934c40ac507aeb1 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
@@ -2,32 +2,45 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ANullTerm extends PTerm
 {
 
-  public ANullTerm()
-  {}
-  public Object clone()
-  {
-    return new ANullTerm();
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseANullTerm(this);
-  }
-
-  public String toString()
-  {
-    return "";
-  }
-
-  void removeChild(Node child)
-  {}
-
-  void replaceChild(Node oldChild, Node newChild)
-  {}
+    public ANullTerm()
+    {
+        // Constructor
+    }
+
+    @Override
+    public Object clone()
+    {
+        return new ANullTerm();
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseANullTerm(this);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "";
+    }
+
+    @Override
+    void removeChild(  Node child)
+    {
+        // Remove child
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
index 722a3d11f4b1122ac27d3fbc3d1f9a3c0979eb41..054fb333e90194ea4894832d396a33b1d1512c7b 100644
--- a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
@@ -2,167 +2,179 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AOperationSet extends PSet
 {
-  private PBasic _left_;
-  private PBinOp _binOp_;
-  private PBasic _right_;
-
-  public AOperationSet()
-  {}
-
-  public AOperationSet(
-    PBasic _left_,
-    PBinOp _binOp_,
-    PBasic _right_)
-  {
-    setLeft(_left_);
-
-    setBinOp(_binOp_);
-
-    setRight(_right_);
-
-  }
-  public Object clone()
-  {
-    return new AOperationSet(
-             (PBasic) cloneNode(_left_),
-             (PBinOp) cloneNode(_binOp_),
-             (PBasic) cloneNode(_right_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAOperationSet(this);
-  }
-
-  public PBasic getLeft()
-  {
-    return _left_;
-  }
-
-  public void setLeft(PBasic node)
-  {
-    if(_left_ != null)
+    private PBasic _left_;
+    private PBinOp _binOp_;
+    private PBasic _right_;
+
+    public AOperationSet()
     {
-      _left_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AOperationSet(
+          PBasic _left_,
+          PBinOp _binOp_,
+          PBasic _right_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setLeft(_left_);
 
-      node.parent(this);
-    }
+        setBinOp(_binOp_);
 
-    _left_ = node;
-  }
+        setRight(_right_);
 
-  public PBinOp getBinOp()
-  {
-    return _binOp_;
-  }
+    }
 
-  public void setBinOp(PBinOp node)
-  {
-    if(_binOp_ != null)
+    @Override
+    public Object clone()
     {
-      _binOp_.parent(null);
+        return new AOperationSet(
+            cloneNode(this._left_),
+            cloneNode(this._binOp_),
+            cloneNode(this._right_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAOperationSet(this);
     }
 
-    _binOp_ = node;
-  }
-
-  public PBasic getRight()
-  {
-    return _right_;
-  }
-
-  public void setRight(PBasic node)
-  {
-    if(_right_ != null)
+    public PBasic getLeft()
     {
-      _right_.parent(null);
+        return this._left_;
     }
 
-    if(node != null)
+    public void setLeft(PBasic node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        if(this._left_ != null)
+        {
+            this._left_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._left_ = node;
     }
 
-    _right_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_left_)
-           + toString(_binOp_)
-           + toString(_right_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_left_ == child)
+    public PBinOp getBinOp()
     {
-      _left_ = null;
-      return;
+        return this._binOp_;
     }
 
-    if(_binOp_ == child)
+    public void setBinOp(PBinOp node)
     {
-      _binOp_ = null;
-      return;
+        if(this._binOp_ != null)
+        {
+            this._binOp_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._binOp_ = node;
     }
 
-    if(_right_ == child)
+    public PBasic getRight()
     {
-      _right_ = null;
-      return;
+        return this._right_;
     }
 
-  }
-
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_left_ == oldChild)
+    public void setRight(PBasic node)
     {
-      setLeft((PBasic) newChild);
-      return;
+        if(this._right_ != null)
+        {
+            this._right_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._right_ = node;
     }
 
-    if(_binOp_ == oldChild)
+    @Override
+    public String toString()
     {
-      setBinOp((PBinOp) newChild);
-      return;
+        return ""
+            + toString(this._left_)
+            + toString(this._binOp_)
+            + toString(this._right_);
     }
 
-    if(_right_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setRight((PBasic) newChild);
-      return;
+        // Remove child
+        if(this._left_ == child)
+        {
+            this._left_ = null;
+            return;
+        }
+
+        if(this._binOp_ == child)
+        {
+            this._binOp_ = null;
+            return;
+        }
+
+        if(this._right_ == child)
+        {
+            this._right_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._left_ == oldChild)
+        {
+            setLeft((PBasic) newChild);
+            return;
+        }
+
+        if(this._binOp_ == oldChild)
+        {
+            setBinOp((PBinOp) newChild);
+            return;
+        }
+
+        if(this._right_ == oldChild)
+        {
+            setRight((PBasic) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
index 047de4ff6177802d85bb8b2a1013bb69e555c3f9..4d3c911ba78b4fd5da0e3360de6b52e4e024f929 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
@@ -2,32 +2,45 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class APlusBinOp extends PBinOp
 {
 
-  public APlusBinOp()
-  {}
-  public Object clone()
-  {
-    return new APlusBinOp();
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAPlusBinOp(this);
-  }
-
-  public String toString()
-  {
-    return "";
-  }
-
-  void removeChild(Node child)
-  {}
-
-  void replaceChild(Node oldChild, Node newChild)
-  {}
+    public APlusBinOp()
+    {
+        // Constructor
+    }
+
+    @Override
+    public Object clone()
+    {
+        return new APlusBinOp();
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAPlusBinOp(this);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "";
+    }
+
+    @Override
+    void removeChild(  Node child)
+    {
+        // Remove child
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
index 1daee86f761acc117e5a8c7288348cd1b19bcba1..893cf30313bb27072994fa353b6b974a7ce5eb73 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class APlusUnOp extends PUnOp
 {
-  private TPlus _plus_;
-
-  public APlusUnOp()
-  {}
-
-  public APlusUnOp(
-    TPlus _plus_)
-  {
-    setPlus(_plus_);
-
-  }
-  public Object clone()
-  {
-    return new APlusUnOp(
-             (TPlus) cloneNode(_plus_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAPlusUnOp(this);
-  }
-
-  public TPlus getPlus()
-  {
-    return _plus_;
-  }
-
-  public void setPlus(TPlus node)
-  {
-    if(_plus_ != null)
+    private TPlus _plus_;
+
+    public APlusUnOp()
     {
-      _plus_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public APlusUnOp(
+          TPlus _plus_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setPlus(_plus_);
 
-      node.parent(this);
     }
 
-    _plus_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new APlusUnOp(
+            cloneNode(this._plus_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_plus_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAPlusUnOp(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_plus_ == child)
+    public TPlus getPlus()
     {
-      _plus_ = null;
-      return;
+        return this._plus_;
     }
 
-  }
+    public void setPlus(TPlus node)
+    {
+        if(this._plus_ != null)
+        {
+            this._plus_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._plus_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._plus_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_plus_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setPlus((TPlus) newChild);
-      return;
+        // Remove child
+        if(this._plus_ == child)
+        {
+            this._plus_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._plus_ == oldChild)
+        {
+            setPlus((TPlus) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index 53c37b689fefa9e184eca991bc9821a4a1a817a2..b5db8fb99260b33069775ed4859e3e26f4929866 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -5,249 +5,232 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AProd extends PProd
 {
-  private TId _id_;
-  private TArrow _arrow_;
-  private final LinkedList _prodTransform_ = new TypedLinkedList(new ProdTransform_Cast());
-  private final LinkedList _alts_ = new TypedLinkedList(new Alts_Cast());
+    private TId _id_;
+    private TArrow _arrow_;
+    private final LinkedList<PElem> _prodTransform_ = new LinkedList<PElem>();
+    private final LinkedList<PAlt> _alts_ = new LinkedList<PAlt>();
 
-  public AProd()
-  {}
+    public AProd()
+    {
+        // Constructor
+    }
 
-  public AProd(
-    TId _id_,
-    TArrow _arrow_,
-    List _prodTransform_,
-    List _alts_)
-  {
-    setId(_id_);
+    public AProd(
+          TId _id_,
+          TArrow _arrow_,
+          List<PElem> _prodTransform_,
+          List<PAlt> _alts_)
+    {
+        // Constructor
+        setId(_id_);
 
-    setArrow(_arrow_);
+        setArrow(_arrow_);
 
+        setProdTransform(_prodTransform_);
+
+        setAlts(_alts_);
+
+    }
+
+    @Override
+    public Object clone()
     {
-      this._prodTransform_.clear();
-      this._prodTransform_.addAll(_prodTransform_);
+        return new AProd(
+            cloneNode(this._id_),
+            cloneNode(this._arrow_),
+            cloneList(this._prodTransform_),
+            cloneList(this._alts_));
     }
 
+    public void apply(Switch sw)
     {
-      this._alts_.clear();
-      this._alts_.addAll(_alts_);
+        ((Analysis) sw).caseAProd(this);
     }
 
-  }
-  public Object clone()
-  {
-    return new AProd(
-             (TId) cloneNode(_id_),
-             (TArrow) cloneNode(_arrow_),
-             cloneList(_prodTransform_),
-             cloneList(_alts_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAProd(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    public TId getId()
     {
-      _id_.parent(null);
+        return this._id_;
     }
 
-    if(node != null)
+    public void setId(TId node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
 
-      node.parent(this);
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-    _id_ = node;
-  }
+            node.parent(this);
+        }
 
-  public TArrow getArrow()
-  {
-    return _arrow_;
-  }
+        this._id_ = node;
+    }
 
-  public void setArrow(TArrow node)
-  {
-    if(_arrow_ != null)
+    public TArrow getArrow()
     {
-      _arrow_.parent(null);
+        return this._arrow_;
     }
 
-    if(node != null)
+    public void setArrow(TArrow node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._arrow_ != null)
+        {
+            this._arrow_.parent(null);
+        }
 
-      node.parent(this);
-    }
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
 
-    _arrow_ = node;
-  }
-
-  public LinkedList getProdTransform()
-  {
-    return _prodTransform_;
-  }
-
-  public void setProdTransform(List list)
-  {
-    _prodTransform_.clear();
-    _prodTransform_.addAll(list);
-  }
-
-  public LinkedList getAlts()
-  {
-    return _alts_;
-  }
-
-  public void setAlts(List list)
-  {
-    _alts_.clear();
-    _alts_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_id_)
-           + toString(_arrow_)
-           + toString(_prodTransform_)
-           + toString(_alts_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
-    {
-      _id_ = null;
-      return;
-    }
+            node.parent(this);
+        }
 
-    if(_arrow_ == child)
-    {
-      _arrow_ = null;
-      return;
+        this._arrow_ = node;
     }
 
-    if(_prodTransform_.remove(child))
+    public LinkedList<PElem> getProdTransform()
     {
-      return;
+        return this._prodTransform_;
     }
 
-    if(_alts_.remove(child))
+    public void setProdTransform(List<PElem> list)
     {
-      return;
-    }
-
-  }
+        this._prodTransform_.clear();
+        this._prodTransform_.addAll(list);
+        for(PElem e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
-    {
-      setId((TId) newChild);
-      return;
+            e.parent(this);
+        }
     }
 
-    if(_arrow_ == oldChild)
+    public LinkedList<PAlt> getAlts()
     {
-      setArrow((TArrow) newChild);
-      return;
+        return this._alts_;
     }
 
-    for(ListIterator i = _prodTransform_.listIterator(); i.hasNext();)
+    public void setAlts(List<PAlt> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._alts_.clear();
+        this._alts_.addAll(list);
+        for(PAlt e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
+
+            e.parent(this);
         }
+    }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._id_)
+            + toString(this._arrow_)
+            + toString(this._prodTransform_)
+            + toString(this._alts_);
     }
 
-    for(ListIterator i = _alts_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._id_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._id_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
-
-  }
-
-  private class ProdTransform_Cast implements Cast
-  {
-    public Object cast(Object o)
-    {
-      PElem node = (PElem) o;
+        if(this._arrow_ == child)
+        {
+            this._arrow_ = null;
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AProd.this))
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._prodTransform_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AProd.this))
-      {
-        node.parent(AProd.this);
-      }
+        if(this._alts_.remove(child))
+        {
+            return;
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 
-  private class Alts_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PAlt node = (PAlt) o;
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._arrow_ == oldChild)
+        {
+            setArrow((TArrow) newChild);
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AProd.this))
-      {
-        node.parent().removeChild(node);
-      }
+        for(ListIterator<PElem> i = this._prodTransform_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PElem) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AProd.this))
-      {
-        node.parent(AProd.this);
-      }
+        for(ListIterator<PAlt> i = this._alts_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PAlt) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AProdName.java b/src/main/java/org/sablecc/sablecc/node/AProdName.java
index 03a3fa120827569400321c630be1c2ca3d016cd3..2c68e0e987fde69361d1f00bbace9d07f807cbbb 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProdName.java
@@ -2,124 +2,136 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AProdName extends PProdName
 {
-  private TId _id_;
-  private TId _prodNameTail_;
-
-  public AProdName()
-  {}
-
-  public AProdName(
-    TId _id_,
-    TId _prodNameTail_)
-  {
-    setId(_id_);
-
-    setProdNameTail(_prodNameTail_);
-
-  }
-  public Object clone()
-  {
-    return new AProdName(
-             (TId) cloneNode(_id_),
-             (TId) cloneNode(_prodNameTail_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAProdName(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    private TId _id_;
+    private TId _prodNameTail_;
+
+    public AProdName()
     {
-      _id_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AProdName(
+          TId _id_,
+          TId _prodNameTail_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
-    }
+        // Constructor
+        setId(_id_);
 
-    _id_ = node;
-  }
+        setProdNameTail(_prodNameTail_);
 
-  public TId getProdNameTail()
-  {
-    return _prodNameTail_;
-  }
+    }
 
-  public void setProdNameTail(TId node)
-  {
-    if(_prodNameTail_ != null)
+    @Override
+    public Object clone()
     {
-      _prodNameTail_.parent(null);
+        return new AProdName(
+            cloneNode(this._id_),
+            cloneNode(this._prodNameTail_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAProdName(this);
     }
 
-    _prodNameTail_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_id_)
-           + toString(_prodNameTail_);
-  }
+    public TId getId()
+    {
+        return this._id_;
+    }
 
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
+    public void setId(TId node)
     {
-      _id_ = null;
-      return;
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    if(_prodNameTail_ == child)
+    public TId getProdNameTail()
     {
-      _prodNameTail_ = null;
-      return;
+        return this._prodNameTail_;
     }
 
-  }
+    public void setProdNameTail(TId node)
+    {
+        if(this._prodNameTail_ != null)
+        {
+            this._prodNameTail_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._prodNameTail_ = node;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
+    @Override
+    public String toString()
     {
-      setId((TId) newChild);
-      return;
+        return ""
+            + toString(this._id_)
+            + toString(this._prodNameTail_);
     }
 
-    if(_prodNameTail_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setProdNameTail((TId) newChild);
-      return;
+        // Remove child
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        if(this._prodNameTail_ == child)
+        {
+            this._prodNameTail_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._prodNameTail_ == oldChild)
+        {
+            setProdNameTail((TId) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
index 75b2c2d535a11bafa0339c554b8b10b03e1615dc..01a72280e08b89e61cb7174c59d5f74d02242282 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -2,32 +2,45 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AProductionSpecifier extends PSpecifier
 {
 
-  public AProductionSpecifier()
-  {}
-  public Object clone()
-  {
-    return new AProductionSpecifier();
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAProductionSpecifier(this);
-  }
-
-  public String toString()
-  {
-    return "";
-  }
-
-  void removeChild(Node child)
-  {}
-
-  void replaceChild(Node oldChild, Node newChild)
-  {}
+    public AProductionSpecifier()
+    {
+        // Constructor
+    }
+
+    @Override
+    public Object clone()
+    {
+        return new AProductionSpecifier();
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAProductionSpecifier(this);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "";
+    }
+
+    @Override
+    void removeChild(  Node child)
+    {
+        // Remove child
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index f3d9fc8d25641e37a74d6bd5d6c5a340db6fb58d..c65832b295b2eceecec579d760d0e1ebd4d2b84a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AProductions extends PProductions
 {
-  private final LinkedList _prods_ = new TypedLinkedList(new Prods_Cast());
+    private final LinkedList<PProd> _prods_ = new LinkedList<PProd>();
+
+    public AProductions()
+    {
+        // Constructor
+    }
+
+    public AProductions(
+          List<PProd> _prods_)
+    {
+        // Constructor
+        setProds(_prods_);
 
-  public AProductions()
-  {}
+    }
 
-  public AProductions(
-    List _prods_)
-  {
+    @Override
+    public Object clone()
     {
-      this._prods_.clear();
-      this._prods_.addAll(_prods_);
+        return new AProductions(
+            cloneList(this._prods_));
     }
 
-  }
-  public Object clone()
-  {
-    return new AProductions(
-             cloneList(_prods_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAProductions(this);
-  }
-
-  public LinkedList getProds()
-  {
-    return _prods_;
-  }
-
-  public void setProds(List list)
-  {
-    _prods_.clear();
-    _prods_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_prods_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_prods_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseAProductions(this);
     }
 
-  }
+    public LinkedList<PProd> getProds()
+    {
+        return this._prods_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _prods_.listIterator(); i.hasNext();)
+    public void setProds(List<PProd> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._prods_.clear();
+        this._prods_.addAll(list);
+        for(PProd e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._prods_);
+    }
 
-  private class Prods_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      PProd node = (PProd) o;
+        // Remove child
+        if(this._prods_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AProductions.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != AProductions.this))
-      {
-        node.parent(AProductions.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<PProd> i = this._prods_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PProd) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
index 497cdf476a7b0e07879e68d6b517ebd2d2ed5285..45c38bdcb7c29f3c4990f66df1c6de46438456d0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AQMarkUnOp extends PUnOp
 {
-  private TQMark _qMark_;
-
-  public AQMarkUnOp()
-  {}
-
-  public AQMarkUnOp(
-    TQMark _qMark_)
-  {
-    setQMark(_qMark_);
-
-  }
-  public Object clone()
-  {
-    return new AQMarkUnOp(
-             (TQMark) cloneNode(_qMark_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAQMarkUnOp(this);
-  }
-
-  public TQMark getQMark()
-  {
-    return _qMark_;
-  }
-
-  public void setQMark(TQMark node)
-  {
-    if(_qMark_ != null)
+    private TQMark _qMark_;
+
+    public AQMarkUnOp()
     {
-      _qMark_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AQMarkUnOp(
+          TQMark _qMark_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setQMark(_qMark_);
 
-      node.parent(this);
     }
 
-    _qMark_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new AQMarkUnOp(
+            cloneNode(this._qMark_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_qMark_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAQMarkUnOp(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_qMark_ == child)
+    public TQMark getQMark()
     {
-      _qMark_ = null;
-      return;
+        return this._qMark_;
     }
 
-  }
+    public void setQMark(TQMark node)
+    {
+        if(this._qMark_ != null)
+        {
+            this._qMark_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._qMark_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._qMark_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_qMark_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setQMark((TQMark) newChild);
-      return;
+        // Remove child
+        if(this._qMark_ == child)
+        {
+            this._qMark_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._qMark_ == oldChild)
+        {
+            setQMark((TQMark) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index d07a142deabc21f23923c9cbbf402eb18afacc26..f4d92262d8f737baa34b069e7f3113824f60dfd9 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ARegExp extends PRegExp
 {
-  private final LinkedList _concats_ = new TypedLinkedList(new Concats_Cast());
+    private final LinkedList<PConcat> _concats_ = new LinkedList<PConcat>();
+
+    public ARegExp()
+    {
+        // Constructor
+    }
+
+    public ARegExp(
+          List<PConcat> _concats_)
+    {
+        // Constructor
+        setConcats(_concats_);
 
-  public ARegExp()
-  {}
+    }
 
-  public ARegExp(
-    List _concats_)
-  {
+    @Override
+    public Object clone()
     {
-      this._concats_.clear();
-      this._concats_.addAll(_concats_);
+        return new ARegExp(
+            cloneList(this._concats_));
     }
 
-  }
-  public Object clone()
-  {
-    return new ARegExp(
-             cloneList(_concats_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseARegExp(this);
-  }
-
-  public LinkedList getConcats()
-  {
-    return _concats_;
-  }
-
-  public void setConcats(List list)
-  {
-    _concats_.clear();
-    _concats_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_concats_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_concats_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseARegExp(this);
     }
 
-  }
+    public LinkedList<PConcat> getConcats()
+    {
+        return this._concats_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _concats_.listIterator(); i.hasNext();)
+    public void setConcats(List<PConcat> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._concats_.clear();
+        this._concats_.addAll(list);
+        for(PConcat e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._concats_);
+    }
 
-  private class Concats_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      PConcat node = (PConcat) o;
+        // Remove child
+        if(this._concats_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != ARegExp.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != ARegExp.this))
-      {
-        node.parent(ARegExp.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<PConcat> i = this._concats_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PConcat) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
index 208d45a4e140f277ea3421872485ebd0c85bc821..3fb61c1223da3c12be5fb8f3ede42d16c395602c 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ARegExpBasic extends PBasic
 {
-  private PRegExp _regExp_;
-
-  public ARegExpBasic()
-  {}
-
-  public ARegExpBasic(
-    PRegExp _regExp_)
-  {
-    setRegExp(_regExp_);
-
-  }
-  public Object clone()
-  {
-    return new ARegExpBasic(
-             (PRegExp) cloneNode(_regExp_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseARegExpBasic(this);
-  }
-
-  public PRegExp getRegExp()
-  {
-    return _regExp_;
-  }
-
-  public void setRegExp(PRegExp node)
-  {
-    if(_regExp_ != null)
+    private PRegExp _regExp_;
+
+    public ARegExpBasic()
     {
-      _regExp_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ARegExpBasic(
+          PRegExp _regExp_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setRegExp(_regExp_);
 
-      node.parent(this);
     }
 
-    _regExp_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new ARegExpBasic(
+            cloneNode(this._regExp_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_regExp_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseARegExpBasic(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_regExp_ == child)
+    public PRegExp getRegExp()
     {
-      _regExp_ = null;
-      return;
+        return this._regExp_;
     }
 
-  }
+    public void setRegExp(PRegExp node)
+    {
+        if(this._regExp_ != null)
+        {
+            this._regExp_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._regExp_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._regExp_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_regExp_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setRegExp((PRegExp) newChild);
-      return;
+        // Remove child
+        if(this._regExp_ == child)
+        {
+            this._regExp_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._regExp_ == oldChild)
+        {
+            setRegExp((PRegExp) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
index eb4ad7f243a11d40399562499fa91c63325194f7..64273f245c39b84f99bf9e08f1c9f99fb5da2d68 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ASetBasic extends PBasic
 {
-  private PSet _set_;
-
-  public ASetBasic()
-  {}
-
-  public ASetBasic(
-    PSet _set_)
-  {
-    setSet(_set_);
-
-  }
-  public Object clone()
-  {
-    return new ASetBasic(
-             (PSet) cloneNode(_set_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseASetBasic(this);
-  }
-
-  public PSet getSet()
-  {
-    return _set_;
-  }
-
-  public void setSet(PSet node)
-  {
-    if(_set_ != null)
+    private PSet _set_;
+
+    public ASetBasic()
     {
-      _set_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ASetBasic(
+          PSet _set_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setSet(_set_);
 
-      node.parent(this);
     }
 
-    _set_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new ASetBasic(
+            cloneNode(this._set_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_set_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseASetBasic(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_set_ == child)
+    public PSet getSet()
     {
-      _set_ = null;
-      return;
+        return this._set_;
     }
 
-  }
+    public void setSet(PSet node)
+    {
+        if(this._set_ != null)
+        {
+            this._set_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._set_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._set_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_set_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setSet((PSet) newChild);
-      return;
+        // Remove child
+        if(this._set_ == child)
+        {
+            this._set_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._set_ == oldChild)
+        {
+            setSet((PSet) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
index c97addb7f61910c0d0f81be98ed350d27443ee14..7f32c1705ed4ca877acbabd4aea47a135dd00c7d 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -2,167 +2,179 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ASimpleListTerm extends PListTerm
 {
-  private PSpecifier _specifier_;
-  private TId _id_;
-  private TId _simpleTermTail_;
-
-  public ASimpleListTerm()
-  {}
-
-  public ASimpleListTerm(
-    PSpecifier _specifier_,
-    TId _id_,
-    TId _simpleTermTail_)
-  {
-    setSpecifier(_specifier_);
-
-    setId(_id_);
-
-    setSimpleTermTail(_simpleTermTail_);
-
-  }
-  public Object clone()
-  {
-    return new ASimpleListTerm(
-             (PSpecifier) cloneNode(_specifier_),
-             (TId) cloneNode(_id_),
-             (TId) cloneNode(_simpleTermTail_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseASimpleListTerm(this);
-  }
-
-  public PSpecifier getSpecifier()
-  {
-    return _specifier_;
-  }
-
-  public void setSpecifier(PSpecifier node)
-  {
-    if(_specifier_ != null)
+    private PSpecifier _specifier_;
+    private TId _id_;
+    private TId _simpleTermTail_;
+
+    public ASimpleListTerm()
     {
-      _specifier_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ASimpleListTerm(
+          PSpecifier _specifier_,
+          TId _id_,
+          TId _simpleTermTail_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setSpecifier(_specifier_);
 
-      node.parent(this);
-    }
+        setId(_id_);
 
-    _specifier_ = node;
-  }
+        setSimpleTermTail(_simpleTermTail_);
 
-  public TId getId()
-  {
-    return _id_;
-  }
+    }
 
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    @Override
+    public Object clone()
     {
-      _id_.parent(null);
+        return new ASimpleListTerm(
+            cloneNode(this._specifier_),
+            cloneNode(this._id_),
+            cloneNode(this._simpleTermTail_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseASimpleListTerm(this);
     }
 
-    _id_ = node;
-  }
-
-  public TId getSimpleTermTail()
-  {
-    return _simpleTermTail_;
-  }
-
-  public void setSimpleTermTail(TId node)
-  {
-    if(_simpleTermTail_ != null)
+    public PSpecifier getSpecifier()
     {
-      _simpleTermTail_.parent(null);
+        return this._specifier_;
     }
 
-    if(node != null)
+    public void setSpecifier(PSpecifier node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        if(this._specifier_ != null)
+        {
+            this._specifier_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._specifier_ = node;
     }
 
-    _simpleTermTail_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_specifier_)
-           + toString(_id_)
-           + toString(_simpleTermTail_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_specifier_ == child)
+    public TId getId()
     {
-      _specifier_ = null;
-      return;
+        return this._id_;
     }
 
-    if(_id_ == child)
+    public void setId(TId node)
     {
-      _id_ = null;
-      return;
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    if(_simpleTermTail_ == child)
+    public TId getSimpleTermTail()
     {
-      _simpleTermTail_ = null;
-      return;
+        return this._simpleTermTail_;
     }
 
-  }
-
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_specifier_ == oldChild)
+    public void setSimpleTermTail(TId node)
     {
-      setSpecifier((PSpecifier) newChild);
-      return;
+        if(this._simpleTermTail_ != null)
+        {
+            this._simpleTermTail_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._simpleTermTail_ = node;
     }
 
-    if(_id_ == oldChild)
+    @Override
+    public String toString()
     {
-      setId((TId) newChild);
-      return;
+        return ""
+            + toString(this._specifier_)
+            + toString(this._id_)
+            + toString(this._simpleTermTail_);
     }
 
-    if(_simpleTermTail_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setSimpleTermTail((TId) newChild);
-      return;
+        // Remove child
+        if(this._specifier_ == child)
+        {
+            this._specifier_ = null;
+            return;
+        }
+
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        if(this._simpleTermTail_ == child)
+        {
+            this._simpleTermTail_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._specifier_ == oldChild)
+        {
+            setSpecifier((PSpecifier) newChild);
+            return;
+        }
+
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._simpleTermTail_ == oldChild)
+        {
+            setSimpleTermTail((TId) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
index 2b03fb31e681b66b39d5fa47c0165baf12e2c337..050fcbeaae99c71b438a171dca922a49b839c069 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -2,167 +2,179 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ASimpleTerm extends PTerm
 {
-  private PSpecifier _specifier_;
-  private TId _id_;
-  private TId _simpleTermTail_;
-
-  public ASimpleTerm()
-  {}
-
-  public ASimpleTerm(
-    PSpecifier _specifier_,
-    TId _id_,
-    TId _simpleTermTail_)
-  {
-    setSpecifier(_specifier_);
-
-    setId(_id_);
-
-    setSimpleTermTail(_simpleTermTail_);
-
-  }
-  public Object clone()
-  {
-    return new ASimpleTerm(
-             (PSpecifier) cloneNode(_specifier_),
-             (TId) cloneNode(_id_),
-             (TId) cloneNode(_simpleTermTail_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseASimpleTerm(this);
-  }
-
-  public PSpecifier getSpecifier()
-  {
-    return _specifier_;
-  }
-
-  public void setSpecifier(PSpecifier node)
-  {
-    if(_specifier_ != null)
+    private PSpecifier _specifier_;
+    private TId _id_;
+    private TId _simpleTermTail_;
+
+    public ASimpleTerm()
     {
-      _specifier_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ASimpleTerm(
+          PSpecifier _specifier_,
+          TId _id_,
+          TId _simpleTermTail_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setSpecifier(_specifier_);
 
-      node.parent(this);
-    }
+        setId(_id_);
 
-    _specifier_ = node;
-  }
+        setSimpleTermTail(_simpleTermTail_);
 
-  public TId getId()
-  {
-    return _id_;
-  }
+    }
 
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    @Override
+    public Object clone()
     {
-      _id_.parent(null);
+        return new ASimpleTerm(
+            cloneNode(this._specifier_),
+            cloneNode(this._id_),
+            cloneNode(this._simpleTermTail_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseASimpleTerm(this);
     }
 
-    _id_ = node;
-  }
-
-  public TId getSimpleTermTail()
-  {
-    return _simpleTermTail_;
-  }
-
-  public void setSimpleTermTail(TId node)
-  {
-    if(_simpleTermTail_ != null)
+    public PSpecifier getSpecifier()
     {
-      _simpleTermTail_.parent(null);
+        return this._specifier_;
     }
 
-    if(node != null)
+    public void setSpecifier(PSpecifier node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        if(this._specifier_ != null)
+        {
+            this._specifier_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._specifier_ = node;
     }
 
-    _simpleTermTail_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_specifier_)
-           + toString(_id_)
-           + toString(_simpleTermTail_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_specifier_ == child)
+    public TId getId()
     {
-      _specifier_ = null;
-      return;
+        return this._id_;
     }
 
-    if(_id_ == child)
+    public void setId(TId node)
     {
-      _id_ = null;
-      return;
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    if(_simpleTermTail_ == child)
+    public TId getSimpleTermTail()
     {
-      _simpleTermTail_ = null;
-      return;
+        return this._simpleTermTail_;
     }
 
-  }
-
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_specifier_ == oldChild)
+    public void setSimpleTermTail(TId node)
     {
-      setSpecifier((PSpecifier) newChild);
-      return;
+        if(this._simpleTermTail_ != null)
+        {
+            this._simpleTermTail_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._simpleTermTail_ = node;
     }
 
-    if(_id_ == oldChild)
+    @Override
+    public String toString()
     {
-      setId((TId) newChild);
-      return;
+        return ""
+            + toString(this._specifier_)
+            + toString(this._id_)
+            + toString(this._simpleTermTail_);
     }
 
-    if(_simpleTermTail_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setSimpleTermTail((TId) newChild);
-      return;
+        // Remove child
+        if(this._specifier_ == child)
+        {
+            this._specifier_ = null;
+            return;
+        }
+
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        if(this._simpleTermTail_ == child)
+        {
+            this._simpleTermTail_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._specifier_ == oldChild)
+        {
+            setSpecifier((PSpecifier) newChild);
+            return;
+        }
+
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._simpleTermTail_ == oldChild)
+        {
+            setSimpleTermTail((TId) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
index 2488d7680f6173d1120c5e486216d92f26062e5d..7747213f944219d851fe55a4b41101bf3e9d6e10 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AStarUnOp extends PUnOp
 {
-  private TStar _star_;
-
-  public AStarUnOp()
-  {}
-
-  public AStarUnOp(
-    TStar _star_)
-  {
-    setStar(_star_);
-
-  }
-  public Object clone()
-  {
-    return new AStarUnOp(
-             (TStar) cloneNode(_star_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAStarUnOp(this);
-  }
-
-  public TStar getStar()
-  {
-    return _star_;
-  }
-
-  public void setStar(TStar node)
-  {
-    if(_star_ != null)
+    private TStar _star_;
+
+    public AStarUnOp()
     {
-      _star_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AStarUnOp(
+          TStar _star_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setStar(_star_);
 
-      node.parent(this);
     }
 
-    _star_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new AStarUnOp(
+            cloneNode(this._star_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_star_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAStarUnOp(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_star_ == child)
+    public TStar getStar()
     {
-      _star_ = null;
-      return;
+        return this._star_;
     }
 
-  }
+    public void setStar(TStar node)
+    {
+        if(this._star_ != null)
+        {
+            this._star_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._star_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._star_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_star_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setStar((TStar) newChild);
-      return;
+        // Remove child
+        if(this._star_ == child)
+        {
+            this._star_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._star_ == oldChild)
+        {
+            setStar((TStar) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 1e87a236a645d511715c9bbf581c7b4d197bbf0e..821711af3d9954a0e4ee010e2b35260ebbecd685 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -5,185 +5,183 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AStateList extends PStateList
 {
-  private TId _id_;
-  private PTransition _transition_;
-  private final LinkedList _stateLists_ = new TypedLinkedList(new StateLists_Cast());
+    private TId _id_;
+    private PTransition _transition_;
+    private final LinkedList<PStateListTail> _stateLists_ = new LinkedList<PStateListTail>();
 
-  public AStateList()
-  {}
+    public AStateList()
+    {
+        // Constructor
+    }
 
-  public AStateList(
-    TId _id_,
-    PTransition _transition_,
-    List _stateLists_)
-  {
-    setId(_id_);
+    public AStateList(
+          TId _id_,
+          PTransition _transition_,
+          List<PStateListTail> _stateLists_)
+    {
+        // Constructor
+        setId(_id_);
 
-    setTransition(_transition_);
+        setTransition(_transition_);
+
+        setStateLists(_stateLists_);
 
-    {
-      this._stateLists_.clear();
-      this._stateLists_.addAll(_stateLists_);
     }
 
-  }
-  public Object clone()
-  {
-    return new AStateList(
-             (TId) cloneNode(_id_),
-             (PTransition) cloneNode(_transition_),
-             cloneList(_stateLists_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAStateList(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    @Override
+    public Object clone()
     {
-      _id_.parent(null);
+        return new AStateList(
+            cloneNode(this._id_),
+            cloneNode(this._transition_),
+            cloneList(this._stateLists_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAStateList(this);
     }
 
-    _id_ = node;
-  }
-
-  public PTransition getTransition()
-  {
-    return _transition_;
-  }
-
-  public void setTransition(PTransition node)
-  {
-    if(_transition_ != null)
+    public TId getId()
     {
-      _transition_.parent(null);
+        return this._id_;
     }
 
-    if(node != null)
+    public void setId(TId node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
 
-      node.parent(this);
+        this._id_ = node;
     }
 
-    _transition_ = node;
-  }
-
-  public LinkedList getStateLists()
-  {
-    return _stateLists_;
-  }
-
-  public void setStateLists(List list)
-  {
-    _stateLists_.clear();
-    _stateLists_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_id_)
-           + toString(_transition_)
-           + toString(_stateLists_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
+    public PTransition getTransition()
     {
-      _id_ = null;
-      return;
+        return this._transition_;
     }
 
-    if(_transition_ == child)
+    public void setTransition(PTransition node)
     {
-      _transition_ = null;
-      return;
+        if(this._transition_ != null)
+        {
+            this._transition_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._transition_ = node;
     }
 
-    if(_stateLists_.remove(child))
+    public LinkedList<PStateListTail> getStateLists()
     {
-      return;
+        return this._stateLists_;
     }
 
-  }
-
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
+    public void setStateLists(List<PStateListTail> list)
     {
-      setId((TId) newChild);
-      return;
+        this._stateLists_.clear();
+        this._stateLists_.addAll(list);
+        for(PStateListTail e : list)
+        {
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
+
+            e.parent(this);
+        }
     }
 
-    if(_transition_ == oldChild)
+    @Override
+    public String toString()
     {
-      setTransition((PTransition) newChild);
-      return;
+        return ""
+            + toString(this._id_)
+            + toString(this._transition_)
+            + toString(this._stateLists_);
     }
 
-    for(ListIterator i = _stateLists_.listIterator(); i.hasNext();)
+    @Override
+    void removeChild(  Node child)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        // Remove child
+        if(this._id_ == child)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
+            this._id_ = null;
+            return;
         }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
-    }
+        if(this._transition_ == child)
+        {
+            this._transition_ = null;
+            return;
+        }
 
-  }
+        if(this._stateLists_.remove(child))
+        {
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 
-  private class StateLists_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      PStateListTail node = (PStateListTail) o;
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AStateList.this))
-      {
-        node.parent().removeChild(node);
-      }
+        if(this._transition_ == oldChild)
+        {
+            setTransition((PTransition) newChild);
+            return;
+        }
 
-      if((node.parent() == null) ||
-          (node.parent() != AStateList.this))
-      {
-        node.parent(AStateList.this);
-      }
+        for(ListIterator<PStateListTail> i = this._stateLists_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PStateListTail) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
index c46e0bd6f07e2fe872f402bf880e50570a058e84..d2014d4702a700b61495b79780f75f80b4a7e212 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
@@ -2,124 +2,136 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AStateListTail extends PStateListTail
 {
-  private TId _id_;
-  private PTransition _transition_;
-
-  public AStateListTail()
-  {}
-
-  public AStateListTail(
-    TId _id_,
-    PTransition _transition_)
-  {
-    setId(_id_);
-
-    setTransition(_transition_);
-
-  }
-  public Object clone()
-  {
-    return new AStateListTail(
-             (TId) cloneNode(_id_),
-             (PTransition) cloneNode(_transition_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAStateListTail(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    private TId _id_;
+    private PTransition _transition_;
+
+    public AStateListTail()
     {
-      _id_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AStateListTail(
+          TId _id_,
+          PTransition _transition_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
-    }
+        // Constructor
+        setId(_id_);
 
-    _id_ = node;
-  }
+        setTransition(_transition_);
 
-  public PTransition getTransition()
-  {
-    return _transition_;
-  }
+    }
 
-  public void setTransition(PTransition node)
-  {
-    if(_transition_ != null)
+    @Override
+    public Object clone()
     {
-      _transition_.parent(null);
+        return new AStateListTail(
+            cloneNode(this._id_),
+            cloneNode(this._transition_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAStateListTail(this);
     }
 
-    _transition_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_id_)
-           + toString(_transition_);
-  }
+    public TId getId()
+    {
+        return this._id_;
+    }
 
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
+    public void setId(TId node)
     {
-      _id_ = null;
-      return;
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    if(_transition_ == child)
+    public PTransition getTransition()
     {
-      _transition_ = null;
-      return;
+        return this._transition_;
     }
 
-  }
+    public void setTransition(PTransition node)
+    {
+        if(this._transition_ != null)
+        {
+            this._transition_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._transition_ = node;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
+    @Override
+    public String toString()
     {
-      setId((TId) newChild);
-      return;
+        return ""
+            + toString(this._id_)
+            + toString(this._transition_);
     }
 
-    if(_transition_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setTransition((PTransition) newChild);
-      return;
+        // Remove child
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        if(this._transition_ == child)
+        {
+            this._transition_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._transition_ == oldChild)
+        {
+            setTransition((PTransition) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index ecbadc82f24f2c50a3c0ef361c059bd58e544b8a..27ccc36e8433d86a91191a750bb5b86a4dbf3d0e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AStates extends PStates
 {
-  private final LinkedList _listId_ = new TypedLinkedList(new ListId_Cast());
+    private final LinkedList<TId> _listId_ = new LinkedList<TId>();
+
+    public AStates()
+    {
+        // Constructor
+    }
+
+    public AStates(
+          List<TId> _listId_)
+    {
+        // Constructor
+        setListId(_listId_);
 
-  public AStates()
-  {}
+    }
 
-  public AStates(
-    List _listId_)
-  {
+    @Override
+    public Object clone()
     {
-      this._listId_.clear();
-      this._listId_.addAll(_listId_);
+        return new AStates(
+            cloneList(this._listId_));
     }
 
-  }
-  public Object clone()
-  {
-    return new AStates(
-             cloneList(_listId_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAStates(this);
-  }
-
-  public LinkedList getListId()
-  {
-    return _listId_;
-  }
-
-  public void setListId(List list)
-  {
-    _listId_.clear();
-    _listId_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_listId_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_listId_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseAStates(this);
     }
 
-  }
+    public LinkedList<TId> getListId()
+    {
+        return this._listId_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _listId_.listIterator(); i.hasNext();)
+    public void setListId(List<TId> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._listId_.clear();
+        this._listId_.addAll(list);
+        for(TId e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._listId_);
+    }
 
-  private class ListId_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      TId node = (TId) o;
+        // Remove child
+        if(this._listId_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != AStates.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != AStates.this))
-      {
-        node.parent(AStates.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<TId> i = this._listId_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((TId) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
index 2d8f9889db0605c27939e570bea3c62f542988b6..f4e449e422afc6aacef5619bfc44f0934fcdd5d8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AStringBasic extends PBasic
 {
-  private TString _string_;
-
-  public AStringBasic()
-  {}
-
-  public AStringBasic(
-    TString _string_)
-  {
-    setString(_string_);
-
-  }
-  public Object clone()
-  {
-    return new AStringBasic(
-             (TString) cloneNode(_string_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAStringBasic(this);
-  }
-
-  public TString getString()
-  {
-    return _string_;
-  }
-
-  public void setString(TString node)
-  {
-    if(_string_ != null)
+    private TString _string_;
+
+    public AStringBasic()
     {
-      _string_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AStringBasic(
+          TString _string_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setString(_string_);
 
-      node.parent(this);
     }
 
-    _string_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new AStringBasic(
+            cloneNode(this._string_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_string_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseAStringBasic(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_string_ == child)
+    public TString getString()
     {
-      _string_ = null;
-      return;
+        return this._string_;
     }
 
-  }
+    public void setString(TString node)
+    {
+        if(this._string_ != null)
+        {
+            this._string_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._string_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._string_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_string_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setString((TString) newChild);
-      return;
+        // Remove child
+        if(this._string_ == child)
+        {
+            this._string_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._string_ == oldChild)
+        {
+            setString((TString) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
index c52f52fd2aa0d3af5f5f9c7794fce6af5071f234..5bca3ad9f625e0e5ed0746b50c41c1a1e2727895 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
@@ -2,253 +2,265 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ATokenDef extends PTokenDef
 {
-  private PStateList _stateList_;
-  private TId _id_;
-  private PRegExp _regExp_;
-  private TSlash _slash_;
-  private PRegExp _lookAhead_;
-
-  public ATokenDef()
-  {}
-
-  public ATokenDef(
-    PStateList _stateList_,
-    TId _id_,
-    PRegExp _regExp_,
-    TSlash _slash_,
-    PRegExp _lookAhead_)
-  {
-    setStateList(_stateList_);
-
-    setId(_id_);
-
-    setRegExp(_regExp_);
-
-    setSlash(_slash_);
-
-    setLookAhead(_lookAhead_);
-
-  }
-  public Object clone()
-  {
-    return new ATokenDef(
-             (PStateList) cloneNode(_stateList_),
-             (TId) cloneNode(_id_),
-             (PRegExp) cloneNode(_regExp_),
-             (TSlash) cloneNode(_slash_),
-             (PRegExp) cloneNode(_lookAhead_));
-  }
+    private PStateList _stateList_;
+    private TId _id_;
+    private PRegExp _regExp_;
+    private TSlash _slash_;
+    private PRegExp _lookAhead_;
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseATokenDef(this);
-  }
-
-  public PStateList getStateList()
-  {
-    return _stateList_;
-  }
-
-  public void setStateList(PStateList node)
-  {
-    if(_stateList_ != null)
+    public ATokenDef()
     {
-      _stateList_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ATokenDef(
+          PStateList _stateList_,
+          TId _id_,
+          PRegExp _regExp_,
+          TSlash _slash_,
+          PRegExp _lookAhead_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
-    }
+        // Constructor
+        setStateList(_stateList_);
 
-    _stateList_ = node;
-  }
+        setId(_id_);
 
-  public TId getId()
-  {
-    return _id_;
-  }
+        setRegExp(_regExp_);
 
-  public void setId(TId node)
-  {
-    if(_id_ != null)
-    {
-      _id_.parent(null);
-    }
+        setSlash(_slash_);
 
-    if(node != null)
-    {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        setLookAhead(_lookAhead_);
 
-      node.parent(this);
     }
 
-    _id_ = node;
-  }
-
-  public PRegExp getRegExp()
-  {
-    return _regExp_;
-  }
-
-  public void setRegExp(PRegExp node)
-  {
-    if(_regExp_ != null)
+    @Override
+    public Object clone()
     {
-      _regExp_.parent(null);
+        return new ATokenDef(
+            cloneNode(this._stateList_),
+            cloneNode(this._id_),
+            cloneNode(this._regExp_),
+            cloneNode(this._slash_),
+            cloneNode(this._lookAhead_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseATokenDef(this);
     }
 
-    _regExp_ = node;
-  }
-
-  public TSlash getSlash()
-  {
-    return _slash_;
-  }
-
-  public void setSlash(TSlash node)
-  {
-    if(_slash_ != null)
+    public PStateList getStateList()
     {
-      _slash_.parent(null);
+        return this._stateList_;
     }
 
-    if(node != null)
+    public void setStateList(PStateList node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        if(this._stateList_ != null)
+        {
+            this._stateList_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._stateList_ = node;
     }
 
-    _slash_ = node;
-  }
-
-  public PRegExp getLookAhead()
-  {
-    return _lookAhead_;
-  }
-
-  public void setLookAhead(PRegExp node)
-  {
-    if(_lookAhead_ != null)
+    public TId getId()
     {
-      _lookAhead_.parent(null);
+        return this._id_;
     }
 
-    if(node != null)
+    public void setId(TId node)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
     }
 
-    _lookAhead_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_stateList_)
-           + toString(_id_)
-           + toString(_regExp_)
-           + toString(_slash_)
-           + toString(_lookAhead_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_stateList_ == child)
+    public PRegExp getRegExp()
     {
-      _stateList_ = null;
-      return;
+        return this._regExp_;
     }
 
-    if(_id_ == child)
+    public void setRegExp(PRegExp node)
     {
-      _id_ = null;
-      return;
+        if(this._regExp_ != null)
+        {
+            this._regExp_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._regExp_ = node;
     }
 
-    if(_regExp_ == child)
+    public TSlash getSlash()
     {
-      _regExp_ = null;
-      return;
+        return this._slash_;
     }
 
-    if(_slash_ == child)
+    public void setSlash(TSlash node)
     {
-      _slash_ = null;
-      return;
+        if(this._slash_ != null)
+        {
+            this._slash_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._slash_ = node;
     }
 
-    if(_lookAhead_ == child)
+    public PRegExp getLookAhead()
     {
-      _lookAhead_ = null;
-      return;
+        return this._lookAhead_;
     }
 
-  }
-
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_stateList_ == oldChild)
+    public void setLookAhead(PRegExp node)
     {
-      setStateList((PStateList) newChild);
-      return;
+        if(this._lookAhead_ != null)
+        {
+            this._lookAhead_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._lookAhead_ = node;
     }
 
-    if(_id_ == oldChild)
+    @Override
+    public String toString()
     {
-      setId((TId) newChild);
-      return;
+        return ""
+            + toString(this._stateList_)
+            + toString(this._id_)
+            + toString(this._regExp_)
+            + toString(this._slash_)
+            + toString(this._lookAhead_);
     }
 
-    if(_regExp_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setRegExp((PRegExp) newChild);
-      return;
+        // Remove child
+        if(this._stateList_ == child)
+        {
+            this._stateList_ = null;
+            return;
+        }
+
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        if(this._regExp_ == child)
+        {
+            this._regExp_ = null;
+            return;
+        }
+
+        if(this._slash_ == child)
+        {
+            this._slash_ = null;
+            return;
+        }
+
+        if(this._lookAhead_ == child)
+        {
+            this._lookAhead_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-    if(_slash_ == oldChild)
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
     {
-      setSlash((TSlash) newChild);
-      return;
+        // Replace child
+        if(this._stateList_ == oldChild)
+        {
+            setStateList((PStateList) newChild);
+            return;
+        }
+
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        if(this._regExp_ == oldChild)
+        {
+            setRegExp((PRegExp) newChild);
+            return;
+        }
+
+        if(this._slash_ == oldChild)
+        {
+            setSlash((TSlash) newChild);
+            return;
+        }
+
+        if(this._lookAhead_ == oldChild)
+        {
+            setLookAhead((PRegExp) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
-
-    if(_lookAhead_ == oldChild)
-    {
-      setLookAhead((PRegExp) newChild);
-      return;
-    }
-
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
index 0828026590ebdb52f33438204db2bceb87098811..66d2b5a3bdd67271a4b617de41e6dd52985bd1f7 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -2,32 +2,45 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ATokenSpecifier extends PSpecifier
 {
 
-  public ATokenSpecifier()
-  {}
-  public Object clone()
-  {
-    return new ATokenSpecifier();
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseATokenSpecifier(this);
-  }
-
-  public String toString()
-  {
-    return "";
-  }
-
-  void removeChild(Node child)
-  {}
-
-  void replaceChild(Node oldChild, Node newChild)
-  {}
+    public ATokenSpecifier()
+    {
+        // Constructor
+    }
+
+    @Override
+    public Object clone()
+    {
+        return new ATokenSpecifier();
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseATokenSpecifier(this);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "";
+    }
+
+    @Override
+    void removeChild(  Node child)
+    {
+        // Remove child
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index 918c9c8535b0d6b79777a6f42be67c17aab25792..107b774c64cf055342ab4901aef39fd8d1209ac8 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -5,99 +5,97 @@ package org.sablecc.sablecc.node;
 import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ATokens extends PTokens
 {
-  private final LinkedList _tokenDefs_ = new TypedLinkedList(new TokenDefs_Cast());
+    private final LinkedList<PTokenDef> _tokenDefs_ = new LinkedList<PTokenDef>();
+
+    public ATokens()
+    {
+        // Constructor
+    }
+
+    public ATokens(
+          List<PTokenDef> _tokenDefs_)
+    {
+        // Constructor
+        setTokenDefs(_tokenDefs_);
 
-  public ATokens()
-  {}
+    }
 
-  public ATokens(
-    List _tokenDefs_)
-  {
+    @Override
+    public Object clone()
     {
-      this._tokenDefs_.clear();
-      this._tokenDefs_.addAll(_tokenDefs_);
+        return new ATokens(
+            cloneList(this._tokenDefs_));
     }
 
-  }
-  public Object clone()
-  {
-    return new ATokens(
-             cloneList(_tokenDefs_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseATokens(this);
-  }
-
-  public LinkedList getTokenDefs()
-  {
-    return _tokenDefs_;
-  }
-
-  public void setTokenDefs(List list)
-  {
-    _tokenDefs_.clear();
-    _tokenDefs_.addAll(list);
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_tokenDefs_);
-  }
-
-  void removeChild(Node child)
-  {
-    if(_tokenDefs_.remove(child))
+    public void apply(Switch sw)
     {
-      return;
+        ((Analysis) sw).caseATokens(this);
     }
 
-  }
+    public LinkedList<PTokenDef> getTokenDefs()
+    {
+        return this._tokenDefs_;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    for(ListIterator i = _tokenDefs_.listIterator(); i.hasNext();)
+    public void setTokenDefs(List<PTokenDef> list)
     {
-      if(i.next() == oldChild)
-      {
-        if(newChild != null)
+        this._tokenDefs_.clear();
+        this._tokenDefs_.addAll(list);
+        for(PTokenDef e : list)
         {
-          i.set(newChild);
-          oldChild.parent(null);
-          return;
-        }
+            if(e.parent() != null)
+            {
+                e.parent().removeChild(e);
+            }
 
-        i.remove();
-        oldChild.parent(null);
-        return;
-      }
+            e.parent(this);
+        }
     }
 
-  }
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._tokenDefs_);
+    }
 
-  private class TokenDefs_Cast implements Cast
-  {
-    public Object cast(Object o)
+    @Override
+    void removeChild(  Node child)
     {
-      PTokenDef node = (PTokenDef) o;
+        // Remove child
+        if(this._tokenDefs_.remove(child))
+        {
+            return;
+        }
 
-      if((node.parent() != null) &&
-          (node.parent() != ATokens.this))
-      {
-        node.parent().removeChild(node);
-      }
+        throw new RuntimeException("Not a child.");
+    }
 
-      if((node.parent() == null) ||
-          (node.parent() != ATokens.this))
-      {
-        node.parent(ATokens.this);
-      }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        for(ListIterator<PTokenDef> i = this._tokenDefs_.listIterator(); i.hasNext();)
+        {
+            if(i.next() == oldChild)
+            {
+                if(newChild != null)
+                {
+                    i.set((PTokenDef) newChild);
+                    newChild.parent(this);
+                    oldChild.parent(null);
+                    return;
+                }
+
+                i.remove();
+                oldChild.parent(null);
+                return;
+            }
+        }
 
-      return node;
+        throw new RuntimeException("Not a child.");
     }
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/ATransition.java b/src/main/java/org/sablecc/sablecc/node/ATransition.java
index ac6157febc68fbe4cd05bc0b497c77b724b51ea8..8c2a8317c95a33455c95e38c5042f149002440b6 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATransition.java
@@ -2,81 +2,93 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class ATransition extends PTransition
 {
-  private TId _id_;
-
-  public ATransition()
-  {}
-
-  public ATransition(
-    TId _id_)
-  {
-    setId(_id_);
-
-  }
-  public Object clone()
-  {
-    return new ATransition(
-             (TId) cloneNode(_id_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseATransition(this);
-  }
-
-  public TId getId()
-  {
-    return _id_;
-  }
-
-  public void setId(TId node)
-  {
-    if(_id_ != null)
+    private TId _id_;
+
+    public ATransition()
     {
-      _id_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public ATransition(
+          TId _id_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        // Constructor
+        setId(_id_);
 
-      node.parent(this);
     }
 
-    _id_ = node;
-  }
+    @Override
+    public Object clone()
+    {
+        return new ATransition(
+            cloneNode(this._id_));
+    }
 
-  public String toString()
-  {
-    return ""
-           + toString(_id_);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseATransition(this);
+    }
 
-  void removeChild(Node child)
-  {
-    if(_id_ == child)
+    public TId getId()
     {
-      _id_ = null;
-      return;
+        return this._id_;
     }
 
-  }
+    public void setId(TId node)
+    {
+        if(this._id_ != null)
+        {
+            this._id_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._id_ = node;
+    }
+
+    @Override
+    public String toString()
+    {
+        return ""
+            + toString(this._id_);
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_id_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setId((TId) newChild);
-      return;
+        // Remove child
+        if(this._id_ == child)
+        {
+            this._id_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._id_ == oldChild)
+        {
+            setId((TId) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/AUnExp.java b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
index b3ad503dae55ab761f187f6868f19b07985bb328..6798dd233f0b98e93bf491d94e98a1a75ffae0fc 100644
--- a/src/main/java/org/sablecc/sablecc/node/AUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
@@ -2,124 +2,136 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class AUnExp extends PUnExp
 {
-  private PBasic _basic_;
-  private PUnOp _unOp_;
-
-  public AUnExp()
-  {}
-
-  public AUnExp(
-    PBasic _basic_,
-    PUnOp _unOp_)
-  {
-    setBasic(_basic_);
-
-    setUnOp(_unOp_);
-
-  }
-  public Object clone()
-  {
-    return new AUnExp(
-             (PBasic) cloneNode(_basic_),
-             (PUnOp) cloneNode(_unOp_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseAUnExp(this);
-  }
-
-  public PBasic getBasic()
-  {
-    return _basic_;
-  }
-
-  public void setBasic(PBasic node)
-  {
-    if(_basic_ != null)
+    private PBasic _basic_;
+    private PUnOp _unOp_;
+
+    public AUnExp()
     {
-      _basic_.parent(null);
+        // Constructor
     }
 
-    if(node != null)
+    public AUnExp(
+          PBasic _basic_,
+          PUnOp _unOp_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
-    }
+        // Constructor
+        setBasic(_basic_);
 
-    _basic_ = node;
-  }
+        setUnOp(_unOp_);
 
-  public PUnOp getUnOp()
-  {
-    return _unOp_;
-  }
+    }
 
-  public void setUnOp(PUnOp node)
-  {
-    if(_unOp_ != null)
+    @Override
+    public Object clone()
     {
-      _unOp_.parent(null);
+        return new AUnExp(
+            cloneNode(this._basic_),
+            cloneNode(this._unOp_));
     }
 
-    if(node != null)
+    public void apply(Switch sw)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        ((Analysis) sw).caseAUnExp(this);
     }
 
-    _unOp_ = node;
-  }
-
-  public String toString()
-  {
-    return ""
-           + toString(_basic_)
-           + toString(_unOp_);
-  }
+    public PBasic getBasic()
+    {
+        return this._basic_;
+    }
 
-  void removeChild(Node child)
-  {
-    if(_basic_ == child)
+    public void setBasic(PBasic node)
     {
-      _basic_ = null;
-      return;
+        if(this._basic_ != null)
+        {
+            this._basic_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._basic_ = node;
     }
 
-    if(_unOp_ == child)
+    public PUnOp getUnOp()
     {
-      _unOp_ = null;
-      return;
+        return this._unOp_;
     }
 
-  }
+    public void setUnOp(PUnOp node)
+    {
+        if(this._unOp_ != null)
+        {
+            this._unOp_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._unOp_ = node;
+    }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_basic_ == oldChild)
+    @Override
+    public String toString()
     {
-      setBasic((PBasic) newChild);
-      return;
+        return ""
+            + toString(this._basic_)
+            + toString(this._unOp_);
     }
 
-    if(_unOp_ == oldChild)
+    @Override
+    void removeChild(  Node child)
     {
-      setUnOp((PUnOp) newChild);
-      return;
+        // Remove child
+        if(this._basic_ == child)
+        {
+            this._basic_ = null;
+            return;
+        }
+
+        if(this._unOp_ == child)
+        {
+            this._unOp_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-  }
+    @Override
+    void replaceChild(  Node oldChild,   Node newChild)
+    {
+        // Replace child
+        if(this._basic_ == oldChild)
+        {
+            setBasic((PBasic) newChild);
+            return;
+        }
+
+        if(this._unOp_ == oldChild)
+        {
+            setUnOp((PUnOp) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/Cast.java b/src/main/java/org/sablecc/sablecc/node/Cast.java
deleted file mode 100644
index 920b94b709695d3e2e96e4922bb0d667f2bb75c0..0000000000000000000000000000000000000000
--- a/src/main/java/org/sablecc/sablecc/node/Cast.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/* This file was generated by SableCC (http://www.sablecc.org/). */
-
-package org.sablecc.sablecc.node;
-
-public interface Cast
-{
-  Object cast(Object o);
-}
diff --git a/src/main/java/org/sablecc/sablecc/node/EOF.java b/src/main/java/org/sablecc/sablecc/node/EOF.java
index 0133752e3dff61fae1c75e55b9af8632a7c5dfc1..c7e38af7c606c57fdbef5f97e423ffbb54ec3577 100644
--- a/src/main/java/org/sablecc/sablecc/node/EOF.java
+++ b/src/main/java/org/sablecc/sablecc/node/EOF.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class EOF extends Token
 {
-  public EOF()
-  {
-    setText("");
-  }
+    public EOF()
+    {
+        setText("");
+    }
 
-  public EOF(int line, int pos)
-  {
-    setText("");
-    setLine(line);
-    setPos(pos);
-  }
+    public EOF(int line, int pos)
+    {
+        setText("");
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new EOF(getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+        return new EOF(getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseEOF(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseEOF(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/NoCast.java b/src/main/java/org/sablecc/sablecc/node/NoCast.java
deleted file mode 100644
index 1678661a159f18165e85a738148ad7b9c2219473..0000000000000000000000000000000000000000
--- a/src/main/java/org/sablecc/sablecc/node/NoCast.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/* This file was generated by SableCC (http://www.sablecc.org/). */
-
-package org.sablecc.sablecc.node;
-
-public class NoCast implements Cast
-{
-  public final static NoCast instance = new NoCast();
-
-  private NoCast()
-  {}
-
-  public Object cast(Object o)
-  {
-    return o;
-  }
-}
diff --git a/src/main/java/org/sablecc/sablecc/node/Node.java b/src/main/java/org/sablecc/sablecc/node/Node.java
index dc73c6c9d1c572da09239cce414e2349384bb14e..121d2cb7c6848675519dc33f7bae5ebfeca94625 100644
--- a/src/main/java/org/sablecc/sablecc/node/Node.java
+++ b/src/main/java/org/sablecc/sablecc/node/Node.java
@@ -3,77 +3,76 @@
 package org.sablecc.sablecc.node;
 
 import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import de.hhu.stups.sablecc.patch.PositionedNode;
 
 @SuppressWarnings({"rawtypes","unchecked"})
-public abstract class Node implements Switchable, Cloneable
+public abstract class Node extends PositionedNode implements Switchable, Cloneable
 {
-  private Node parent;
+    private Node parent;
 
-  public abstract Object clone();
+    @Override
+    public abstract Object clone();
 
-  public Node parent()
-  {
-    return parent;
-  }
+    public Node parent()
+    {
+        return this.parent;
+    }
 
-  void parent(Node parent)
-  {
-    this.parent = parent;
-  }
+    void parent(  Node parent)
+    {
+        this.parent = parent;
+    }
 
-  abstract void removeChild(Node child);
-  abstract void replaceChild(Node oldChild, Node newChild);
+    abstract void removeChild(Node child);
+    abstract void replaceChild(Node oldChild, Node newChild);
 
-  public void replaceBy(Node node)
-  {
-    if(parent != null)
+    public void replaceBy(Node node)
     {
-      parent.replaceChild(this, node);
+        this.parent.replaceChild(this, node);
     }
-  }
 
-  protected String toString(Node node)
-  {
-    if(node != null)
+    protected String toString(Node node)
     {
-      return node.toString();
+        if(node != null)
+        {
+            return node.toString();
+        }
+
+        return "";
     }
 
-    return "";
-  }
+    protected String toString(List list)
+    {
+        StringBuffer s = new StringBuffer();
 
-  protected String toString(List list)
-  {
-    StringBuffer s = new StringBuffer();
+        for(Iterator i = list.iterator(); i.hasNext();)
+        {
+            s.append(i.next());
+        }
 
-    for(Iterator i = list.iterator(); i.hasNext();)
-    {
-      s.append(i.next());
+        return s.toString();
     }
 
-    return s.toString();
-  }
 
-  protected Node cloneNode(Node node)
-  {
-    if(node != null)
+    protected <T extends Node> T cloneNode(T node)
     {
-      return (Node) node.clone();
+        if(node != null)
+        {
+            return (T) node.clone();
+        }
+
+        return null;
     }
 
-    return null;
-  }
+    protected <T extends Node> List<T> cloneList(List<T> list)
+    {
+        List<T> clone = new LinkedList<T>();
 
-  protected List cloneList(List list)
-  {
-    List clone = new LinkedList();
+        for(T n : list)
+        {
+            clone.add((T) n.clone());
+        }
 
-    for(Iterator i = list.iterator(); i.hasNext();)
-    {
-      clone.add(((Node) i.next()).clone());
+        return clone;
     }
-
-    return clone;
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/NodeCast.java b/src/main/java/org/sablecc/sablecc/node/NodeCast.java
deleted file mode 100644
index 9ee7fc37754a488e7cdceb5b761c875da3ba3e45..0000000000000000000000000000000000000000
--- a/src/main/java/org/sablecc/sablecc/node/NodeCast.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/* This file was generated by SableCC (http://www.sablecc.org/). */
-
-package org.sablecc.sablecc.node;
-
-public class NodeCast implements Cast
-{
-  public final static NodeCast instance = new NodeCast();
-
-  private NodeCast()
-  {}
-
-  public Object cast(Object o)
-  {
-    return (Node) o;
-  }
-}
diff --git a/src/main/java/org/sablecc/sablecc/node/PAlt.java b/src/main/java/org/sablecc/sablecc/node/PAlt.java
index 765b8b08b22acf5e5d86572d5b8b46dce78bb420..cdd9a4a1b3b768fa2d342c892091d87ac6d02948 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAlt.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PAlt extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PAltTransform.java b/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
index 58b590e1bd7c490dead68419cbfb40488bd43b16..88fa1313d9489b43ac4b2b96091e49d145a19167 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PAltTransform extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PAst.java b/src/main/java/org/sablecc/sablecc/node/PAst.java
index aa65dd77ce60d019b5196e161ceb9b81b21e57b5..a452a4011af0531bdfaf2688801f08aae6908545 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAst.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PAst extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PAstAlt.java b/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
index edabab56a0f1ee7b29e328eae7621c3a8a315287..55198fca62bba5b9d23ea5fe7fd04665c5a7cad2 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PAstAlt extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PAstProd.java b/src/main/java/org/sablecc/sablecc/node/PAstProd.java
index 7ca1e78f644f5420b48a00fbd11db1557d6ccf24..e1953d36a707b6e99a61d61121f70015ba9ab42f 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstProd.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PAstProd extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PBasic.java b/src/main/java/org/sablecc/sablecc/node/PBasic.java
index cbd72e51ff86487a14986c22a31b54080298e477..8059acc32259601153011c646ccabf0f91c0b9c7 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBasic.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PBasic extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PBinOp.java b/src/main/java/org/sablecc/sablecc/node/PBinOp.java
index a2286b4d3d76bd6a92022d8495ab1332b29f1632..002602c74337b2408c78de9082cfa68ac66da563 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBinOp.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PBinOp extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PChar.java b/src/main/java/org/sablecc/sablecc/node/PChar.java
index 70fdd12088f1b21119bdb594fd1ca449aaea29f4..d78fe0f94822488633eeb955bf51295e1fba0434 100644
--- a/src/main/java/org/sablecc/sablecc/node/PChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PChar.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PChar extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PConcat.java b/src/main/java/org/sablecc/sablecc/node/PConcat.java
index c97f5d9f9c02cff0b95fff1cbbbf47fa4727aa9f..773b2158e201258b76ce8a98f3cb96d4c3840586 100644
--- a/src/main/java/org/sablecc/sablecc/node/PConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/PConcat.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PConcat extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PElem.java b/src/main/java/org/sablecc/sablecc/node/PElem.java
index 66dbb70708efa425a93a0e1975a65caa8d520058..f456e5c8cba040e360555d20403607587a450bd2 100644
--- a/src/main/java/org/sablecc/sablecc/node/PElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/PElem.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PElem extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PGrammar.java b/src/main/java/org/sablecc/sablecc/node/PGrammar.java
index 2e4f19ffbfb3c9230dd0a48a3ff71c7ef69828ca..39cba9b4fb06b8370b83648e1b7b45dbe470cb9b 100644
--- a/src/main/java/org/sablecc/sablecc/node/PGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PGrammar.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PGrammar extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PHelperDef.java b/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
index 8a2b10974701d2a679e30141e5b44a6de9712cff..45fd6fa46af48bde49482af6f3a4ee68de3e887f 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PHelperDef extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PHelpers.java b/src/main/java/org/sablecc/sablecc/node/PHelpers.java
index 1553c87bfeb3027ad4d6888f583841ca1a47a287..a97168f74f5cfb79d2567375098745d10b48529f 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelpers.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PHelpers extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
index 253de6edde5b51e9aecba5e7e1cc1bec4d467536..b2a6876ee472284dd08bd6531f02e5a5e8875268 100644
--- a/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PIgnTokens extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PListTerm.java b/src/main/java/org/sablecc/sablecc/node/PListTerm.java
index 35837af3962f50cc91a968c601b00d5f2b04fa95..52a45c0bbab0d4f73c91adfa9250858a6ac1d26a 100644
--- a/src/main/java/org/sablecc/sablecc/node/PListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PListTerm.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PListTerm extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PProd.java b/src/main/java/org/sablecc/sablecc/node/PProd.java
index 2c728027296d3294ea7391beea7d5d8df6a350d4..9a08cf828fb79e5bba4f0bae804bcd678281b8e2 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProd.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PProd extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PProdName.java b/src/main/java/org/sablecc/sablecc/node/PProdName.java
index 7da2e3d8e70269ed7d6c7824e9268651b8bb321a..437a52a6be8d594cdf79668859906da35d3b1969 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProdName.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PProdName extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PProductions.java b/src/main/java/org/sablecc/sablecc/node/PProductions.java
index f5f954b03ed88ee76ff0a2374c1caeb9e451d023..0a61e72f5c78ac966d541e6ee5fdc8822f28f6a8 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProductions.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PProductions extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PRegExp.java b/src/main/java/org/sablecc/sablecc/node/PRegExp.java
index 6d1e4368d654288d77e23c202963b0911b798c9f..e3f7a6ea8c24b08c193a7874e02bfe343940edf6 100644
--- a/src/main/java/org/sablecc/sablecc/node/PRegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PRegExp.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PRegExp extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PSet.java b/src/main/java/org/sablecc/sablecc/node/PSet.java
index cbddf9a67ba05e53dcf9c552f5d1b6df99893246..91668ff7b17baa0d45d29985de866e693a6c9140 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSet.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PSet extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PSpecifier.java b/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
index 99cb14ed530f7c39e9bb365ccfc356f90520fdd2..ec0fcdcac751a5d9856b47cfcd3353ae2eaccab9 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PSpecifier extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PStateList.java b/src/main/java/org/sablecc/sablecc/node/PStateList.java
index 6bc113239fcadd68c857216b072819e6fc058738..5ca56fe3dcaa924d147a7b255e52285fb4838d44 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateList.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PStateList extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PStateListTail.java b/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
index d34ca707152bd9d68a094591d32d1e4c99c28c35..bc7de2f0fc933611fd0cdc7005ae59f8654dc907 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PStateListTail extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PStates.java b/src/main/java/org/sablecc/sablecc/node/PStates.java
index c01e8726b3c14a6810021326fdeb370f7db637ac..d494b18b4ec3e4a44973d3ccd55fbd549c5095bd 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStates.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PStates extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PTerm.java b/src/main/java/org/sablecc/sablecc/node/PTerm.java
index 49feaaf853c99d85da826b859a067b7abd6ead71..4deeffc5e767198e6588fa48128b4be1d449e827 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTerm.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PTerm extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PTokenDef.java b/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
index c9e7f2d849fc93a4cb596247b4b06f010fe1c4b1..1c66c9035dcd7bd769c4f58a16eb9a07bcaf1a58 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PTokenDef extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PTokens.java b/src/main/java/org/sablecc/sablecc/node/PTokens.java
index 0539578de1d0f1e69e31e392d55d1e48e968c45f..4e0aa2698b81b86beef6244e115cc72b1a9150bd 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokens.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PTokens extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PTransition.java b/src/main/java/org/sablecc/sablecc/node/PTransition.java
index e651f5e6b44902d7d527e94dd2215efedda07ff7..ef0f1f4959feb59fa2fd492ef1ac4844ad4d37d8 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTransition.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PTransition extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PUnExp.java b/src/main/java/org/sablecc/sablecc/node/PUnExp.java
index e16b6e9a894000d0ba78f54c3a4fe5455da1af25..aad69b0bd27ced82c7aceacf32baf9f118e84343 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnExp.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PUnExp extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/PUnOp.java b/src/main/java/org/sablecc/sablecc/node/PUnOp.java
index 48e258210c73b550e8506ebed8840418914ecc8a..de0324755c145d19bb97c5f2d8f04ade0f80637d 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnOp.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public abstract class PUnOp extends Node
-  {}
+{
+    // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/Start.java b/src/main/java/org/sablecc/sablecc/node/Start.java
index 0806caa644b9991a0065ce61b9913307bce6212c..d6d58e5237b404c4591fbe2e96ceb1cfdf255865 100644
--- a/src/main/java/org/sablecc/sablecc/node/Start.java
+++ b/src/main/java/org/sablecc/sablecc/node/Start.java
@@ -6,116 +6,126 @@ import org.sablecc.sablecc.analysis.*;
 
 public final class Start extends Node
 {
-  private PGrammar _pGrammar_;
-  private EOF _eof_;
-
-  public Start()
-  {}
-
-  public Start(
-    PGrammar _pGrammar_,
-    EOF _eof_)
-  {
-    setPGrammar(_pGrammar_);
-    setEOF(_eof_);
-  }
-
-  public Object clone()
-  {
-    return new Start(
-             (PGrammar) cloneNode(_pGrammar_),
-             (EOF) cloneNode(_eof_));
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseStart(this);
-  }
-
-  public PGrammar getPGrammar()
-  {
-    return _pGrammar_;
-  }
-
-  public void setPGrammar(PGrammar node)
-  {
-    if(_pGrammar_ != null)
+    private PGrammar _pGrammar_;
+    private EOF _eof_;
+
+    public Start()
     {
-      _pGrammar_.parent(null);
+        // Empty body
     }
 
-    if(node != null)
+    public Start(
+          PGrammar _pGrammar_,
+          EOF _eof_)
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
-
-      node.parent(this);
+        setPGrammar(_pGrammar_);
+        setEOF(_eof_);
     }
 
-    _pGrammar_ = node;
-  }
-
-  public EOF getEOF()
-  {
-    return _eof_;
-  }
+    @Override
+    public Object clone()
+    {
+        return new Start(
+            cloneNode(this._pGrammar_),
+            cloneNode(this._eof_));
+    }
 
-  public void setEOF(EOF node)
-  {
-    if(_eof_ != null)
+    public void apply(Switch sw)
     {
-      _eof_.parent(null);
+        ((Analysis) sw).caseStart(this);
     }
 
-    if(node != null)
+    public PGrammar getPGrammar()
     {
-      if(node.parent() != null)
-      {
-        node.parent().removeChild(node);
-      }
+        return this._pGrammar_;
+    }
 
-      node.parent(this);
+    public void setPGrammar(PGrammar node)
+    {
+        if(this._pGrammar_ != null)
+        {
+            this._pGrammar_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._pGrammar_ = node;
     }
 
-    _eof_ = node;
-  }
+    public EOF getEOF()
+    {
+        return this._eof_;
+    }
 
-  void removeChild(Node child)
-  {
-    if(_pGrammar_ == child)
+    public void setEOF(EOF node)
     {
-      _pGrammar_ = null;
-      return;
+        if(this._eof_ != null)
+        {
+            this._eof_.parent(null);
+        }
+
+        if(node != null)
+        {
+            if(node.parent() != null)
+            {
+                node.parent().removeChild(node);
+            }
+
+            node.parent(this);
+        }
+
+        this._eof_ = node;
     }
 
-    if(_eof_ == child)
+    @Override
+    void removeChild(Node child)
     {
-      _eof_ = null;
-      return;
+        if(this._pGrammar_ == child)
+        {
+            this._pGrammar_ = null;
+            return;
+        }
+
+        if(this._eof_ == child)
+        {
+            this._eof_ = null;
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
-  }
 
-  void replaceChild(Node oldChild, Node newChild)
-  {
-    if(_pGrammar_ == oldChild)
+    @Override
+    void replaceChild(Node oldChild, Node newChild)
     {
-      setPGrammar((PGrammar) newChild);
-      return;
+        if(this._pGrammar_ == oldChild)
+        {
+            setPGrammar((PGrammar) newChild);
+            return;
+        }
+
+        if(this._eof_ == oldChild)
+        {
+            setEOF((EOF) newChild);
+            return;
+        }
+
+        throw new RuntimeException("Not a child.");
     }
 
-    if(_eof_ == oldChild)
+    @Override
+    public String toString()
     {
-      setEOF((EOF) newChild);
-      return;
+        return "" +
+            toString(this._pGrammar_) +
+            toString(this._eof_);
     }
-  }
-
-  public String toString()
-  {
-    return "" +
-           toString(_pGrammar_) +
-           toString(_eof_);
-  }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/Switch.java b/src/main/java/org/sablecc/sablecc/node/Switch.java
index 8cadd36c842707c27c55b365c2343cc918f65579..e8f74ebd9b8cb261cb5aaf8c5f25c5af282e43aa 100644
--- a/src/main/java/org/sablecc/sablecc/node/Switch.java
+++ b/src/main/java/org/sablecc/sablecc/node/Switch.java
@@ -3,4 +3,6 @@
 package org.sablecc.sablecc.node;
 
 public interface Switch
-  {}
+{
+        // Empty body
+}
diff --git a/src/main/java/org/sablecc/sablecc/node/Switchable.java b/src/main/java/org/sablecc/sablecc/node/Switchable.java
index 6e0ef866b76779306465141a413b9c0a269dcdd4..cee4d38c620fa6ce732484654f1b80926fbb223d 100644
--- a/src/main/java/org/sablecc/sablecc/node/Switchable.java
+++ b/src/main/java/org/sablecc/sablecc/node/Switchable.java
@@ -4,5 +4,5 @@ package org.sablecc.sablecc.node;
 
 public interface Switchable
 {
-  void apply(Switch sw);
+    void apply(Switch sw);
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TAbstract.java b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
index 754a507ad702f8d768f6c31e957b073d295b1eda..eb97a3985015f601b66f0c4bee17d73b7087bab4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TAbstract.java
+++ b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TAbstract extends Token
 {
-  public TAbstract()
-  {
-    super.setText("Abstract");
-  }
-
-  public TAbstract(int line, int pos)
-  {
-    super.setText("Abstract");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TAbstract(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTAbstract(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TAbstract text.");
-  }
+    public TAbstract()
+    {
+        super.setText("Abstract");
+    }
+
+    public TAbstract(int line, int pos)
+    {
+        super.setText("Abstract");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TAbstract(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTAbstract(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TAbstract text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TArrow.java b/src/main/java/org/sablecc/sablecc/node/TArrow.java
index dcfedeeca09b000f901cc8d7d34cf31a9657fc7a..d917abf242139caabf6b3c74f7ea435a12ddecf6 100644
--- a/src/main/java/org/sablecc/sablecc/node/TArrow.java
+++ b/src/main/java/org/sablecc/sablecc/node/TArrow.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TArrow extends Token
 {
-  public TArrow()
-  {
-    super.setText("->");
-  }
-
-  public TArrow(int line, int pos)
-  {
-    super.setText("->");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TArrow(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTArrow(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TArrow text.");
-  }
+    public TArrow()
+    {
+        super.setText("->");
+    }
+
+    public TArrow(int line, int pos)
+    {
+        super.setText("->");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TArrow(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTArrow(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TArrow text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TBar.java b/src/main/java/org/sablecc/sablecc/node/TBar.java
index 507ae38e02e0040b54e717b75d29e9b949de7b5b..9461f60b3ac5f22519d0c387ebba65db15e62efa 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBar.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TBar extends Token
 {
-  public TBar()
-  {
-    super.setText("|");
-  }
-
-  public TBar(int line, int pos)
-  {
-    super.setText("|");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TBar(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTBar(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TBar text.");
-  }
+    public TBar()
+    {
+        super.setText("|");
+    }
+
+    public TBar(int line, int pos)
+    {
+        super.setText("|");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TBar(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTBar(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TBar text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TBlank.java b/src/main/java/org/sablecc/sablecc/node/TBlank.java
index 585bca25a0fdfc3f2b707f35433812c4618d2c90..50351284dea97426246abb99aadf31f2307b27ee 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBlank.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBlank.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TBlank extends Token
 {
-  public TBlank(String text)
-  {
-    setText(text);
-  }
+    public TBlank(String text)
+    {
+        setText(text);
+    }
 
-  public TBlank(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public TBlank(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new TBlank(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new TBlank(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTBlank(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTBlank(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TChar.java b/src/main/java/org/sablecc/sablecc/node/TChar.java
index c5b6bd536fd3ac181265cd9f785482ff477839a6..a5963f42fcbee945656efcb52c2bb7c1e06179f5 100644
--- a/src/main/java/org/sablecc/sablecc/node/TChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TChar.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TChar extends Token
 {
-  public TChar(String text)
-  {
-    setText(text);
-  }
+    public TChar(String text)
+    {
+        setText(text);
+    }
 
-  public TChar(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public TChar(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new TChar(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new TChar(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTChar(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTChar(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TColon.java b/src/main/java/org/sablecc/sablecc/node/TColon.java
index 678a3b5b3491b44435c06fa7ccb574c162b9907a..551d2671788f800ec806081aca0234df1afe0566 100644
--- a/src/main/java/org/sablecc/sablecc/node/TColon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TColon.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TColon extends Token
 {
-  public TColon()
-  {
-    super.setText(":");
-  }
-
-  public TColon(int line, int pos)
-  {
-    super.setText(":");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TColon(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTColon(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TColon text.");
-  }
+    public TColon()
+    {
+        super.setText(":");
+    }
+
+    public TColon(int line, int pos)
+    {
+        super.setText(":");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TColon(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTColon(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TColon text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TComma.java b/src/main/java/org/sablecc/sablecc/node/TComma.java
index b0364e7dbf4a4c41e7a8e4d32d498c3790e0cba1..1bf528aeed09cec60b5d944df79efca87539f1d5 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComma.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComma.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TComma extends Token
 {
-  public TComma()
-  {
-    super.setText(",");
-  }
-
-  public TComma(int line, int pos)
-  {
-    super.setText(",");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TComma(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTComma(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TComma text.");
-  }
+    public TComma()
+    {
+        super.setText(",");
+    }
+
+    public TComma(int line, int pos)
+    {
+        super.setText(",");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TComma(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTComma(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TComma text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TComment.java b/src/main/java/org/sablecc/sablecc/node/TComment.java
index 4056f524507badad62fe131403d5a60cc4c550a3..cf3af65c569af3e4d8f79f5859d896f76382421a 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComment.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComment.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TComment extends Token
 {
-  public TComment(String text)
-  {
-    setText(text);
-  }
+    public TComment(String text)
+    {
+        setText(text);
+    }
 
-  public TComment(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public TComment(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new TComment(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new TComment(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTComment(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTComment(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDDot.java b/src/main/java/org/sablecc/sablecc/node/TDDot.java
index 0243d227e9c9ee821149c0f56247337cdac8dbac..9b8b97131d4f929d77e90528ca3ab2071c92aa83 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDDot.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TDDot extends Token
 {
-  public TDDot()
-  {
-    super.setText("..");
-  }
-
-  public TDDot(int line, int pos)
-  {
-    super.setText("..");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TDDot(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTDDot(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TDDot text.");
-  }
+    public TDDot()
+    {
+        super.setText("..");
+    }
+
+    public TDDot(int line, int pos)
+    {
+        super.setText("..");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TDDot(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTDDot(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TDDot text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDecChar.java b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
index f9c46881b06ad4345a166b6ca6581e7da0a99905..b66df0cb7ed311e8e51dcd7f54d9ddeac84cf6af 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TDecChar extends Token
 {
-  public TDecChar(String text)
-  {
-    setText(text);
-  }
+    public TDecChar(String text)
+    {
+        setText(text);
+    }
 
-  public TDecChar(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public TDecChar(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new TDecChar(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new TDecChar(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTDecChar(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTDecChar(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TDot.java b/src/main/java/org/sablecc/sablecc/node/TDot.java
index 84df19e5d5bcc1a4571fad0937f77d8515080b20..f53c313d905f848012d8de0202978a00a6d4193e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDot.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TDot extends Token
 {
-  public TDot()
-  {
-    super.setText(".");
-  }
-
-  public TDot(int line, int pos)
-  {
-    super.setText(".");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TDot(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTDot(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TDot text.");
-  }
+    public TDot()
+    {
+        super.setText(".");
+    }
+
+    public TDot(int line, int pos)
+    {
+        super.setText(".");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TDot(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTDot(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TDot text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TEqual.java b/src/main/java/org/sablecc/sablecc/node/TEqual.java
index 1ff8e6d9628d3680da8c6c981101b89c6bdbc253..650030f450d92a2b83bbaff1039726e787f71a6e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TEqual.java
+++ b/src/main/java/org/sablecc/sablecc/node/TEqual.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TEqual extends Token
 {
-  public TEqual()
-  {
-    super.setText("=");
-  }
-
-  public TEqual(int line, int pos)
-  {
-    super.setText("=");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TEqual(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTEqual(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TEqual text.");
-  }
+    public TEqual()
+    {
+        super.setText("=");
+    }
+
+    public TEqual(int line, int pos)
+    {
+        super.setText("=");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TEqual(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTEqual(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TEqual text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/THelpers.java b/src/main/java/org/sablecc/sablecc/node/THelpers.java
index 8ed8c1e92375c4f16480b6df4ecba27509679cbb..b13dc0597798eb1ca84e85d474ea149db9087913 100644
--- a/src/main/java/org/sablecc/sablecc/node/THelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/THelpers.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class THelpers extends Token
 {
-  public THelpers()
-  {
-    super.setText("Helpers");
-  }
-
-  public THelpers(int line, int pos)
-  {
-    super.setText("Helpers");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new THelpers(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTHelpers(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change THelpers text.");
-  }
+    public THelpers()
+    {
+        super.setText("Helpers");
+    }
+
+    public THelpers(int line, int pos)
+    {
+        super.setText("Helpers");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new THelpers(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTHelpers(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change THelpers text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/THexChar.java b/src/main/java/org/sablecc/sablecc/node/THexChar.java
index b3d7d91001ed4073141b212c0459ff2cf2de09ae..b1709447a33f6a786b0ed7d9d92b050b98fcc790 100644
--- a/src/main/java/org/sablecc/sablecc/node/THexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/THexChar.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class THexChar extends Token
 {
-  public THexChar(String text)
-  {
-    setText(text);
-  }
+    public THexChar(String text)
+    {
+        setText(text);
+    }
 
-  public THexChar(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public THexChar(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new THexChar(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new THexChar(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTHexChar(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTHexChar(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TId.java b/src/main/java/org/sablecc/sablecc/node/TId.java
index 7ba0ed913f4ee5b06b40d071227aff1dcf0e1c5b..b3fc9b397ce0b5302c4acf6dc985eb62700d67e7 100644
--- a/src/main/java/org/sablecc/sablecc/node/TId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TId.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TId extends Token
 {
-  public TId(String text)
-  {
-    setText(text);
-  }
+    public TId(String text)
+    {
+        setText(text);
+    }
 
-  public TId(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public TId(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new TId(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new TId(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTId(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTId(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TIgnored.java b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
index 230eef84ccc4e6108858f314f31e3692534a52b8..34762f2fa6b17399cc2e24b73580ed2167f5bd6e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TIgnored.java
+++ b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TIgnored extends Token
 {
-  public TIgnored()
-  {
-    super.setText("Ignored");
-  }
-
-  public TIgnored(int line, int pos)
-  {
-    super.setText("Ignored");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TIgnored(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTIgnored(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TIgnored text.");
-  }
+    public TIgnored()
+    {
+        super.setText("Ignored");
+    }
+
+    public TIgnored(int line, int pos)
+    {
+        super.setText("Ignored");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TIgnored(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTIgnored(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TIgnored text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBkt.java b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
index 64c601580f8125b088a98eba94e166c3429ae1b1..8bccb003d1b494531165605185499ae56fbca45b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TLBkt extends Token
 {
-  public TLBkt()
-  {
-    super.setText("[");
-  }
-
-  public TLBkt(int line, int pos)
-  {
-    super.setText("[");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TLBkt(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTLBkt(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TLBkt text.");
-  }
+    public TLBkt()
+    {
+        super.setText("[");
+    }
+
+    public TLBkt(int line, int pos)
+    {
+        super.setText("[");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TLBkt(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTLBkt(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TLBkt text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBrace.java b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
index 062bc75b97b522aa4f958f51933c1902611c7a23..5a28eda9adfdd3a3704bdbd60fd648f81bd69f17 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TLBrace extends Token
 {
-  public TLBrace()
-  {
-    super.setText("{");
-  }
-
-  public TLBrace(int line, int pos)
-  {
-    super.setText("{");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TLBrace(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTLBrace(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TLBrace text.");
-  }
+    public TLBrace()
+    {
+        super.setText("{");
+    }
+
+    public TLBrace(int line, int pos)
+    {
+        super.setText("{");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TLBrace(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTLBrace(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TLBrace text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TLPar.java b/src/main/java/org/sablecc/sablecc/node/TLPar.java
index eb69710090b90c789b2ecb9e80d9ce446802b477..e61eefc50a033e3d204a9084d707b26aadf1973b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLPar.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TLPar extends Token
 {
-  public TLPar()
-  {
-    super.setText("(");
-  }
-
-  public TLPar(int line, int pos)
-  {
-    super.setText("(");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TLPar(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTLPar(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TLPar text.");
-  }
+    public TLPar()
+    {
+        super.setText("(");
+    }
+
+    public TLPar(int line, int pos)
+    {
+        super.setText("(");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TLPar(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTLPar(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TLPar text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TMinus.java b/src/main/java/org/sablecc/sablecc/node/TMinus.java
index 6e655a990dfa5dd26aa220a61eadd28a3029ba5c..b65ff3bfe51d19c4e1c6190fd43c3e5d39c9a870 100644
--- a/src/main/java/org/sablecc/sablecc/node/TMinus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TMinus.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TMinus extends Token
 {
-  public TMinus()
-  {
-    super.setText("-");
-  }
-
-  public TMinus(int line, int pos)
-  {
-    super.setText("-");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TMinus(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTMinus(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TMinus text.");
-  }
+    public TMinus()
+    {
+        super.setText("-");
+    }
+
+    public TMinus(int line, int pos)
+    {
+        super.setText("-");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TMinus(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTMinus(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TMinus text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TNew.java b/src/main/java/org/sablecc/sablecc/node/TNew.java
index 4d3b87ecbba5fdf4f4db2739ef3e82e0b31df02c..9528c703061739344621bd597d43789416b1b3e8 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNew.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNew.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TNew extends Token
 {
-  public TNew()
-  {
-    super.setText("New");
-  }
-
-  public TNew(int line, int pos)
-  {
-    super.setText("New");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TNew(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTNew(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TNew text.");
-  }
+    public TNew()
+    {
+        super.setText("New");
+    }
+
+    public TNew(int line, int pos)
+    {
+        super.setText("New");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TNew(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTNew(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TNew text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TNull.java b/src/main/java/org/sablecc/sablecc/node/TNull.java
index 4b523c7bfae2abd16458b665f51da499eb73dfe8..7f9ff100c2effbbba41b45bfd7ba487febc8b8ca 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNull.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNull.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TNull extends Token
 {
-  public TNull()
-  {
-    super.setText("Null");
-  }
-
-  public TNull(int line, int pos)
-  {
-    super.setText("Null");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TNull(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTNull(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TNull text.");
-  }
+    public TNull()
+    {
+        super.setText("Null");
+    }
+
+    public TNull(int line, int pos)
+    {
+        super.setText("Null");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TNull(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTNull(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TNull text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPackage.java b/src/main/java/org/sablecc/sablecc/node/TPackage.java
index 10003fa8792ee3fea9434cc66c16e0e167ad3868..09ecf6b9f7556faecdab39d8b0babe8dc21dfee8 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPackage.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPackage.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TPackage extends Token
 {
-  public TPackage()
-  {
-    super.setText("Package");
-  }
-
-  public TPackage(int line, int pos)
-  {
-    super.setText("Package");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TPackage(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTPackage(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TPackage text.");
-  }
+    public TPackage()
+    {
+        super.setText("Package");
+    }
+
+    public TPackage(int line, int pos)
+    {
+        super.setText("Package");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TPackage(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTPackage(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TPackage text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPkgId.java b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
index 0390d216a5806ebdca52ddb622fb31d9157b4bd4..43be1ae4597271a7b111d1205e260a114470d876 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPkgId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TPkgId extends Token
 {
-  public TPkgId(String text)
-  {
-    setText(text);
-  }
+    public TPkgId(String text)
+    {
+        setText(text);
+    }
 
-  public TPkgId(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public TPkgId(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new TPkgId(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new TPkgId(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTPkgId(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTPkgId(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TPlus.java b/src/main/java/org/sablecc/sablecc/node/TPlus.java
index d7e48a78ac3451ff92997f269af713fc11cb422c..d10d2754f536b2b78a6c463543c929d58a6b0e93 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPlus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPlus.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TPlus extends Token
 {
-  public TPlus()
-  {
-    super.setText("+");
-  }
-
-  public TPlus(int line, int pos)
-  {
-    super.setText("+");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TPlus(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTPlus(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TPlus text.");
-  }
+    public TPlus()
+    {
+        super.setText("+");
+    }
+
+    public TPlus(int line, int pos)
+    {
+        super.setText("+");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TPlus(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTPlus(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TPlus text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
index 8cb21c2818edfba005e6318296eb431deafb69c4..62981d843559d42646ee73b2360f39cf545b4114 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TProductionSpecifier extends Token
 {
-  public TProductionSpecifier()
-  {
-    super.setText("P");
-  }
-
-  public TProductionSpecifier(int line, int pos)
-  {
-    super.setText("P");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TProductionSpecifier(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTProductionSpecifier(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TProductionSpecifier text.");
-  }
+    public TProductionSpecifier()
+    {
+        super.setText("P");
+    }
+
+    public TProductionSpecifier(int line, int pos)
+    {
+        super.setText("P");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TProductionSpecifier(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTProductionSpecifier(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TProductionSpecifier text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductions.java b/src/main/java/org/sablecc/sablecc/node/TProductions.java
index 6d201b5396eb58b593a30d6c2602082bad53c064..4c84479e81c10fa19d2a3053aa6348c831efde12 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductions.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TProductions extends Token
 {
-  public TProductions()
-  {
-    super.setText("Productions");
-  }
-
-  public TProductions(int line, int pos)
-  {
-    super.setText("Productions");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TProductions(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTProductions(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TProductions text.");
-  }
+    public TProductions()
+    {
+        super.setText("Productions");
+    }
+
+    public TProductions(int line, int pos)
+    {
+        super.setText("Productions");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TProductions(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTProductions(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TProductions text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TQMark.java b/src/main/java/org/sablecc/sablecc/node/TQMark.java
index b07059fc1a218a5e18239a07165e2db4f5cbca14..1783c9d0dd7365181654254b19de3baddfa64109 100644
--- a/src/main/java/org/sablecc/sablecc/node/TQMark.java
+++ b/src/main/java/org/sablecc/sablecc/node/TQMark.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TQMark extends Token
 {
-  public TQMark()
-  {
-    super.setText("?");
-  }
-
-  public TQMark(int line, int pos)
-  {
-    super.setText("?");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TQMark(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTQMark(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TQMark text.");
-  }
+    public TQMark()
+    {
+        super.setText("?");
+    }
+
+    public TQMark(int line, int pos)
+    {
+        super.setText("?");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TQMark(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTQMark(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TQMark text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBkt.java b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
index a32f0e78be0ecc83f4c3298580c6f095fad1f349..06f97f37280a1c4a1ae27bd6ec2db0e48576e287 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TRBkt extends Token
 {
-  public TRBkt()
-  {
-    super.setText("]");
-  }
-
-  public TRBkt(int line, int pos)
-  {
-    super.setText("]");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TRBkt(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTRBkt(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TRBkt text.");
-  }
+    public TRBkt()
+    {
+        super.setText("]");
+    }
+
+    public TRBkt(int line, int pos)
+    {
+        super.setText("]");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TRBkt(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTRBkt(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TRBkt text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBrace.java b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
index 26e4a85e2bdb5d82abc021052cef3a06702bde40..b3790e238c7aeabae7dbe22493f3cc3305f0caae 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TRBrace extends Token
 {
-  public TRBrace()
-  {
-    super.setText("}");
-  }
-
-  public TRBrace(int line, int pos)
-  {
-    super.setText("}");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TRBrace(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTRBrace(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TRBrace text.");
-  }
+    public TRBrace()
+    {
+        super.setText("}");
+    }
+
+    public TRBrace(int line, int pos)
+    {
+        super.setText("}");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TRBrace(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTRBrace(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TRBrace text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TRPar.java b/src/main/java/org/sablecc/sablecc/node/TRPar.java
index 856a3753f8b4fafcf61cfe2ab9492d388c01e19a..8ae718064fdb9095345c06af77793312edd9ab39 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRPar.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TRPar extends Token
 {
-  public TRPar()
-  {
-    super.setText(")");
-  }
-
-  public TRPar(int line, int pos)
-  {
-    super.setText(")");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TRPar(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTRPar(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TRPar text.");
-  }
+    public TRPar()
+    {
+        super.setText(")");
+    }
+
+    public TRPar(int line, int pos)
+    {
+        super.setText(")");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TRPar(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTRPar(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TRPar text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
index c7686576d7bc7c24ef3b9b5a370c27ec68029293..7459a88b2fd7e1f0324ceec8848618d7518e6776 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TSemicolon extends Token
 {
-  public TSemicolon()
-  {
-    super.setText(";");
-  }
-
-  public TSemicolon(int line, int pos)
-  {
-    super.setText(";");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TSemicolon(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTSemicolon(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TSemicolon text.");
-  }
+    public TSemicolon()
+    {
+        super.setText(";");
+    }
+
+    public TSemicolon(int line, int pos)
+    {
+        super.setText(";");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TSemicolon(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTSemicolon(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TSemicolon text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSlash.java b/src/main/java/org/sablecc/sablecc/node/TSlash.java
index c37106279c67d30b599dc5af92f8a1ee495f8d62..9b6c4d064f6183470cb2b052c3f0729789b279b2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSlash.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSlash.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TSlash extends Token
 {
-  public TSlash()
-  {
-    super.setText("/");
-  }
-
-  public TSlash(int line, int pos)
-  {
-    super.setText("/");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TSlash(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTSlash(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TSlash text.");
-  }
+    public TSlash()
+    {
+        super.setText("/");
+    }
+
+    public TSlash(int line, int pos)
+    {
+        super.setText("/");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TSlash(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTSlash(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TSlash text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TStar.java b/src/main/java/org/sablecc/sablecc/node/TStar.java
index e96232713386d03ef96ba93e2325dc402c96560a..d07c9897b349c4fb52f2dfa79eee5a6e4f3cd866 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStar.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TStar extends Token
 {
-  public TStar()
-  {
-    super.setText("*");
-  }
-
-  public TStar(int line, int pos)
-  {
-    super.setText("*");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TStar(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTStar(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TStar text.");
-  }
+    public TStar()
+    {
+        super.setText("*");
+    }
+
+    public TStar(int line, int pos)
+    {
+        super.setText("*");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TStar(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTStar(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TStar text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TStates.java b/src/main/java/org/sablecc/sablecc/node/TStates.java
index 6933885e12d52feaa2d609b2d3335fbdbdd572cb..a589aebe2b1e16824828ec30240f04082f8f1b88 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStates.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TStates extends Token
 {
-  public TStates()
-  {
-    super.setText("States");
-  }
-
-  public TStates(int line, int pos)
-  {
-    super.setText("States");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TStates(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTStates(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TStates text.");
-  }
+    public TStates()
+    {
+        super.setText("States");
+    }
+
+    public TStates(int line, int pos)
+    {
+        super.setText("States");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TStates(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTStates(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TStates text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TString.java b/src/main/java/org/sablecc/sablecc/node/TString.java
index daf490873f71e75c8ba44e8fb59b81dae8e7c468..b9990c0a14aa614f888e814fcad4cd32529a0138 100644
--- a/src/main/java/org/sablecc/sablecc/node/TString.java
+++ b/src/main/java/org/sablecc/sablecc/node/TString.java
@@ -4,27 +4,29 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TString extends Token
 {
-  public TString(String text)
-  {
-    setText(text);
-  }
+    public TString(String text)
+    {
+        setText(text);
+    }
 
-  public TString(String text, int line, int pos)
-  {
-    setText(text);
-    setLine(line);
-    setPos(pos);
-  }
+    public TString(String text, int line, int pos)
+    {
+        setText(text);
+        setLine(line);
+        setPos(pos);
+    }
 
-  public Object clone()
-  {
-    return new TString(getText(), getLine(), getPos());
-  }
+    @Override
+    public Object clone()
+    {
+      return new TString(getText(), getLine(), getPos());
+    }
 
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTString(this);
-  }
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTString(this);
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TSyntax.java b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
index 3b24e0e447d8ca0a6643c9f1d5d2554ec6b8d941..46198509cf452f6f4b3ed725dc5c8f68917075a0 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSyntax.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TSyntax extends Token
 {
-  public TSyntax()
-  {
-    super.setText("Syntax");
-  }
-
-  public TSyntax(int line, int pos)
-  {
-    super.setText("Syntax");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TSyntax(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTSyntax(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TSyntax text.");
-  }
+    public TSyntax()
+    {
+        super.setText("Syntax");
+    }
+
+    public TSyntax(int line, int pos)
+    {
+        super.setText("Syntax");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TSyntax(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTSyntax(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TSyntax text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
index ec0360ff26ac4cf94d4c0aa39af4530577ee7cbf..99c163f63947e424cf12037889c0ee53eb32401c 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TTokenSpecifier extends Token
 {
-  public TTokenSpecifier()
-  {
-    super.setText("T");
-  }
-
-  public TTokenSpecifier(int line, int pos)
-  {
-    super.setText("T");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TTokenSpecifier(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTTokenSpecifier(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TTokenSpecifier text.");
-  }
+    public TTokenSpecifier()
+    {
+        super.setText("T");
+    }
+
+    public TTokenSpecifier(int line, int pos)
+    {
+        super.setText("T");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TTokenSpecifier(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTTokenSpecifier(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TTokenSpecifier text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokens.java b/src/main/java/org/sablecc/sablecc/node/TTokens.java
index f815231c00c1f02569cd6ac7b7a781199d47e77d..a89cfc332df8fe25cc3fdb7770739feb2ade5b47 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokens.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TTokens extends Token
 {
-  public TTokens()
-  {
-    super.setText("Tokens");
-  }
-
-  public TTokens(int line, int pos)
-  {
-    super.setText("Tokens");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TTokens(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTTokens(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TTokens text.");
-  }
+    public TTokens()
+    {
+        super.setText("Tokens");
+    }
+
+    public TTokens(int line, int pos)
+    {
+        super.setText("Tokens");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TTokens(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTTokens(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TTokens text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TTree.java b/src/main/java/org/sablecc/sablecc/node/TTree.java
index 46ae3872837a229e036614a864a947791ed97175..49d7e1397fe094bef96a5470d61f613146aad6a4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTree.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTree.java
@@ -4,32 +4,35 @@ package org.sablecc.sablecc.node;
 
 import org.sablecc.sablecc.analysis.*;
 
+
 public final class TTree extends Token
 {
-  public TTree()
-  {
-    super.setText("Tree");
-  }
-
-  public TTree(int line, int pos)
-  {
-    super.setText("Tree");
-    setLine(line);
-    setPos(pos);
-  }
-
-  public Object clone()
-  {
-    return new TTree(getLine(), getPos());
-  }
-
-  public void apply(Switch sw)
-  {
-    ((Analysis) sw).caseTTree(this);
-  }
-
-  public void setText(String text)
-  {
-    throw new RuntimeException("Cannot change TTree text.");
-  }
+    public TTree()
+    {
+        super.setText("Tree");
+    }
+
+    public TTree(int line, int pos)
+    {
+        super.setText("Tree");
+        setLine(line);
+        setPos(pos);
+    }
+
+    @Override
+    public Object clone()
+    {
+      return new TTree(getLine(), getPos());
+    }
+
+    public void apply(Switch sw)
+    {
+        ((Analysis) sw).caseTTree(this);
+    }
+
+    @Override
+    public void setText(  String text)
+    {
+        throw new RuntimeException("Cannot change TTree text.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/Token.java b/src/main/java/org/sablecc/sablecc/node/Token.java
index ec21ec9417014fd1ae259e07a08964efd78370ce..93820c0f791db1df1cf997b958fd9e2ad219b465 100644
--- a/src/main/java/org/sablecc/sablecc/node/Token.java
+++ b/src/main/java/org/sablecc/sablecc/node/Token.java
@@ -2,50 +2,61 @@
 
 package org.sablecc.sablecc.node;
 
-public abstract class Token extends Node
+import de.hhu.stups.sablecc.patch.IToken;
+
+
+
+public abstract class Token extends Node implements IToken
 {
-  private String text;
-  private int line;
-  private int pos;
-
-  public String getText()
-  {
-    return text;
-  }
-
-  public void setText(String text)
-  {
-    this.text = text;
-  }
-
-  public int getLine()
-  {
-    return line;
-  }
-
-  public void setLine(int line)
-  {
-    this.line = line;
-  }
-
-  public int getPos()
-  {
-    return pos;
-  }
-
-  public void setPos(int pos)
-  {
-    this.pos = pos;
-  }
-
-  public String toString()
-  {
-    return text + " ";
-  }
-
-  void removeChild(Node child)
-  {}
-
-  void replaceChild(Node oldChild, Node newChild)
-  {}
+    private String text;
+    private int line;
+    private int pos;
+
+    public String getText()
+    {
+        return this.text;
+    }
+
+    public void setText(  String text)
+    {
+        this.text = text;
+    }
+
+    public int getLine()
+    {
+        return this.line;
+    }
+
+    public void setLine(  int line)
+    {
+        this.line = line;
+    }
+
+    public int getPos()
+    {
+        return this.pos;
+    }
+
+    public void setPos(  int pos)
+    {
+        this.pos = pos;
+    }
+
+    @Override
+    public String toString()
+    {
+        return this.text + " ";
+    }
+
+    @Override
+    void removeChild( Node child)
+    {
+        throw new RuntimeException("Not a child.");
+    }
+
+    @Override
+    void replaceChild( Node oldChild, Node newChild)
+    {
+        throw new RuntimeException("Not a child.");
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/TypedLinkedList.java b/src/main/java/org/sablecc/sablecc/node/TypedLinkedList.java
deleted file mode 100644
index 7c9ebd6fd1a5c03f7eafdcb228bd578286b44477..0000000000000000000000000000000000000000
--- a/src/main/java/org/sablecc/sablecc/node/TypedLinkedList.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/* This file was generated by SableCC (http://www.sablecc.org/). */
-
-package org.sablecc.sablecc.node;
-
-import java.util.*;
-
-public class TypedLinkedList extends LinkedList
-{
-  Cast cast;
-
-  public TypedLinkedList()
-  {
-    super();
-
-    cast = NoCast.instance;
-  }
-
-  public TypedLinkedList(Collection c)
-  {
-    super(c);
-
-    cast = NoCast.instance;
-  }
-
-  public TypedLinkedList(Cast cast)
-  {
-    super();
-
-    this.cast = cast;
-  }
-
-  public TypedLinkedList(Collection c, Cast cast)
-  {
-    super(c);
-
-    this.cast = cast;
-  }
-
-  public Cast getCast()
-  {
-    return cast;
-  }
-
-  public void add
-    (int index, Object element)
-  {
-    super.add(index, cast.cast(element));
-  }
-
-  public boolean add
-    (Object o)
-  {
-    return super.add(cast.cast(o));
-  }
-
-  public boolean addAll(Collection c)
-  {
-    Object[] elements = c.toArray();
-    for(int i=0; i<elements.length; i++)
-    {
-      super.add(cast.cast(elements[i]));
-    }
-    return true;
-  }
-
-  public boolean addAll(int index, Collection c)
-  {
-    int pos = index;
-    Object[] elements = c.toArray();
-    for(int i=0; i<elements.length; i++)
-    {
-      super.add(pos++, cast.cast(elements[i]));
-    }
-    return true;
-  }
-
-  public void addFirst(Object o)
-  {
-    super.addFirst(cast.cast(o));
-  }
-
-  public void addLast(Object o)
-  {
-    super.addLast(cast.cast(o));
-  }
-
-  public ListIterator listIterator(int index)
-  {
-    return new TypedLinkedListIterator(super.listIterator(index));
-  }
-
-  private class TypedLinkedListIterator implements ListIterator
-  {
-    ListIterator iterator;
-
-    TypedLinkedListIterator(ListIterator iterator)
-    {
-      this.iterator = iterator;
-    }
-
-    public boolean hasNext()
-    {
-      return iterator.hasNext();
-    }
-
-    public Object next()
-    {
-      return iterator.next();
-    }
-
-    public boolean hasPrevious()
-    {
-      return iterator.hasPrevious();
-    }
-
-    public Object previous()
-    {
-      return iterator.previous();
-    }
-
-    public int nextIndex()
-    {
-      return iterator.nextIndex();
-    }
-
-    public int previousIndex()
-    {
-      return iterator.previousIndex();
-    }
-
-    public void remove
-      ()
-    {
-      iterator.remove();
-    }
-
-    public void set
-      (Object o)
-    {
-      iterator.set(cast.cast(o));
-    }
-
-    public void add
-      (Object o)
-    {
-      iterator.add(cast.cast(o));
-    }
-  }
-}
diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index 69bc5db7dd85ec5de52470e39e52a77e4a7f0bdd..22f9263ce6cef8eb5028a4e766edff599356b28c 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -6,9272 +6,13051 @@ import org.sablecc.sablecc.lexer.*;
 import org.sablecc.sablecc.node.*;
 import org.sablecc.sablecc.analysis.*;
 import java.util.*;
+import de.hhu.stups.sablecc.patch.*;
+
 
 import java.io.DataInputStream;
 import java.io.BufferedInputStream;
 import java.io.IOException;
 
-public class Parser
+@SuppressWarnings({"rawtypes","unchecked","unused"})
+public class Parser implements IParser
 {
-  public final Analysis ignoredTokens = new AnalysisAdapter();
-
-  protected ArrayList nodeList;
-
-  private final Lexer lexer;
-  private final ListIterator stack = new LinkedList().listIterator();
-  private int last_shift;
-  private int last_pos;
-  private int last_line;
-  private Token last_token;
-  private final TokenIndex converter = new TokenIndex();
-  private final int[] action = new int[2];
-
-  private final static int SHIFT = 0;
-  private final static int REDUCE = 1;
-  private final static int ACCEPT = 2;
-  private final static int ERROR = 3;
-
-  public Parser(Lexer lexer)
-  {
-    this.lexer = lexer;
-  }
-
-  private void push(int numstate, ArrayList listNode) throws ParserException, LexerException, IOException
-  {
-    this.nodeList = listNode;
+    protected ArrayList nodeList;
+
+    private final Lexer lexer;
+    private final ListIterator stack = new LinkedList().listIterator();
+    private int last_pos;
+    private int last_line;
+    private Token last_token;
+    private final TokenIndex converter = new TokenIndex();
+    private final int[] action = new int[2];
+
+    private final static int SHIFT = 0;
+    private final static int REDUCE = 1;
+    private final static int ACCEPT = 2;
+    private final static int ERROR = 3;
+
+    protected ArrayList firstPopped = null;
+    protected ArrayList lastPopped = null;
+    private ITokenListContainer lex;
+
+    public Parser(  Lexer lexer)
+    {
+        this.lexer = lexer;
+        this.lex = lexer;
+    }
+
+
+    private Map<PositionedNode, SourcecodeRange> mapping = new HashMap<PositionedNode, SourcecodeRange>();
+    public Map<PositionedNode, SourcecodeRange> getMapping() { return this.mapping; }
+
+    protected void checkResult(Object elementToCheck) {
+        checkResult(elementToCheck, false);
+    }
+
+
+    protected void checkResult(Object elementToCheck, boolean slurp) {
+        // nodes with no tokens or sub nodes at all may exist
+        if (this.firstPopped == null) {
+            return;
+        }
+
+        if (elementToCheck instanceof LinkedList) {
+            /*
+             * special case: this is a list of nodes, for example an identifier
+             * list, so we don't want to check the list but the last element
+             * added to it
+             */
+            final LinkedList nodeList = (LinkedList) elementToCheck;
+
+            if (nodeList.size() > 0) {
+                elementToCheck = nodeList.get(nodeList.size() - 1);
+            } else {
+                // no positions for empty lists...
+                return;
+            }
+        }
+
+        if (!(elementToCheck instanceof PositionedNode)) {
+            throw new Error(
+                "Unexpected elementToCheck (not instanceof PositionedNode): "
+                    + elementToCheck.getClass().getSimpleName() + "/"
+                    + elementToCheck);
+        }
+
+        if (!this.getMapping().containsKey(elementToCheck) || slurp ) {
+            final PositionedNode node = (PositionedNode) elementToCheck;
+
+            // dealing with a one-token element
+            if (this.lastPopped == null) {
+                this.lastPopped = this.firstPopped;
+            }
+
+            final int begin = findBeginPos(this.lastPopped, node);
+            int end = findEndPos(this.firstPopped);
+            if (end == -1) end = begin;
+            final SourcecodeRange range = new SourcecodeRange(begin, end);
+
+            this.getMapping().put(node, range);
+
+            node.setStartPos(createBeginPos(begin));
+            node.setEndPos(createEndPos(end));
+        }
+    }
+
+
+    protected int findBeginPos(final ArrayList list,
+            PositionedNode n) {
+        Object first = list.get(0);
+        if (!(first instanceof PositionedNode) && !(first instanceof IToken)) {
+            List list2 = (List) first;
+
+            if (list2.size() > 0) {
+                first = list2.get(0);
+            } else {
+                /*
+                 * Sometimes (haven't found out why) we get empty list here. In
+                 * the only observed cases we were looking for the source range
+                 * of the whole parse unit. Then the index is 0.
+                 */
+                return 0;
+            }
+        }
+
+        if (first instanceof IToken) {
+            return findIndex((IToken) first);
+        }
+
+        final PositionedNode node = (PositionedNode) first;
+        final SourcecodeRange item = this.getMapping().get(node);
+        if (item == null){
+            System.err.println(n.getClass().getSimpleName() + " / " + node.getClass().getSimpleName() + ": " + node);
+        }
+        return item.getBeginIndex();
+    }
+
+
+    protected int findEndPos(final ArrayList list) {
+        Object last = list.get(list.size() - 1);
+        if (!(last instanceof PositionedNode) && !(last instanceof IToken)) {
+            final List list2 = (List) last;
+            last = list2.get(list2.size() - 1);
+        }
+
+        if (last instanceof IToken) {
+            return findIndex((IToken) last);
+        }
+
+        final PositionedNode node = (PositionedNode) last;
+        final SourcecodeRange item = this.getMapping().get(node);
+        if (item == null)
+            return -1;
+        return item.getEndIndex();
+    }
+
+    protected int findIndex(final IToken token) {
+        final List<IToken> list = this.lex.getTokenList();
+
+        for (int i = list.size() - 1; i >= 0; i--) {
+            if (list.get(i) == token) {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+    protected SourcePosition createBeginPos(final int index) {
+        final List<IToken> list = this.lex.getTokenList();
+        final IToken token = list.get(index);
+        return new SourcePosition(token.getLine(), token.getPos());
+    }
+
+    protected SourcePosition createEndPos(final int index) {
+        final List<IToken> list = this.lex.getTokenList();
+        final IToken token = list.get(index);
+        return new SourcePosition(token.getLine(), token.getPos()
+            + token.getText().length());
+    }
+
+    protected boolean addElementsFromListToNewList(String productionRuleAsString) {
+        return true;
+    }
+
+    private void push(int numstate, ArrayList listNode) throws ParserException, LexerException, IOException
+    {
+        this.nodeList = listNode;
+
+        if(!this.stack.hasNext())
+        {
+            this.stack.add(new State(numstate, this.nodeList));
+            return;
+        }
+
+        State s = (State) this.stack.next();
+        s.state = numstate;
+        s.nodes = this.nodeList;
+    }
+
+    private int goTo(int index)
+    {
+        int state = state();
+        int low = 1;
+        int high = gotoTable[index].length - 1;
+        int value = gotoTable[index][0][1];
+
+        while(low <= high)
+        {
+            int middle = (low + high) >>> 1;
+
+            if(state < gotoTable[index][middle][0])
+            {
+                high = middle - 1;
+            }
+            else if(state > gotoTable[index][middle][0])
+            {
+                low = middle + 1;
+            }
+            else
+            {
+                value = gotoTable[index][middle][1];
+                break;
+            }
+        }
+
+        return value;
+    }
+
+    private int state()
+    {
+        State s = (State) this.stack.previous();
+        this.stack.next();
+        return s.state;
+    }
+
+    protected ArrayList pop()
+    {
+        ArrayList list = ((State) this.stack.previous()).nodes;
+        if (this.firstPopped == null) {
+            this.firstPopped = list;
+        } else {
+            this.lastPopped = list;
+        }
+        return list;
+    }
+
+    private int index(Switchable token)
+    {
+        this.converter.index = -1;
+        token.apply(this.converter);
+        return this.converter.index;
+    }
+
+
+    public Start parse() throws ParserException, LexerException, IOException
+    {
+        this.getMapping().clear();
+
+        push(0, null);
+        while(true)
+        {
+            while(index(this.lexer.peek()) == -1)
+            {
+                // this is an ignored token
+                this.lexer.next();
+            }
+
+            this.last_pos = this.lexer.peek().getPos();
+            this.last_line = this.lexer.peek().getLine();
+            this.last_token = this.lexer.peek();
+
+            int index = index(this.lexer.peek());
+            this.action[0] = Parser.actionTable[state()][0][1];
+            this.action[1] = Parser.actionTable[state()][0][2];
+
+            int low = 1;
+            int high = Parser.actionTable[state()].length - 1;
+
+            while(low <= high)
+            {
+                int middle = (low + high) >>> 1;
+
+                if(index < Parser.actionTable[state()][middle][0])
+                {
+                    high = middle - 1;
+                }
+                else if(index > Parser.actionTable[state()][middle][0])
+                {
+                    low = middle + 1;
+                }
+                else
+                {
+                    this.action[0] = Parser.actionTable[state()][middle][1];
+                    this.action[1] = Parser.actionTable[state()][middle][2];
+                    break;
+                }
+            }
+
+            switch(this.action[0])
+            {
+                case SHIFT:
+            {
+                ArrayList list = new ArrayList();
+                list.add(this.lexer.next());
+                        push(this.action[1], list);
+                    }
+            break;
+                case REDUCE:
+                    switch(this.action[1])
+                    {
+                    case 0: /* reduce AAgrammar1Grammar */
+                    {
+                        ArrayList list = new0();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 1: /* reduce AAgrammar2Grammar */
+                    {
+                        ArrayList list = new1();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 2: /* reduce AAgrammar3Grammar */
+                    {
+                        ArrayList list = new2();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 3: /* reduce AAgrammar4Grammar */
+                    {
+                        ArrayList list = new3();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 4: /* reduce AAgrammar5Grammar */
+                    {
+                        ArrayList list = new4();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 5: /* reduce AAgrammar6Grammar */
+                    {
+                        ArrayList list = new5();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 6: /* reduce AAgrammar7Grammar */
+                    {
+                        ArrayList list = new6();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 7: /* reduce AAgrammar8Grammar */
+                    {
+                        ArrayList list = new7();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 8: /* reduce AAgrammar9Grammar */
+                    {
+                        ArrayList list = new8();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 9: /* reduce AAgrammar10Grammar */
+                    {
+                        ArrayList list = new9();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 10: /* reduce AAgrammar11Grammar */
+                    {
+                        ArrayList list = new10();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 11: /* reduce AAgrammar12Grammar */
+                    {
+                        ArrayList list = new11();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 12: /* reduce AAgrammar13Grammar */
+                    {
+                        ArrayList list = new12();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 13: /* reduce AAgrammar14Grammar */
+                    {
+                        ArrayList list = new13();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 14: /* reduce AAgrammar15Grammar */
+                    {
+                        ArrayList list = new14();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 15: /* reduce AAgrammar16Grammar */
+                    {
+                        ArrayList list = new15();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 16: /* reduce AAgrammar17Grammar */
+                    {
+                        ArrayList list = new16();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 17: /* reduce AAgrammar18Grammar */
+                    {
+                        ArrayList list = new17();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 18: /* reduce AAgrammar19Grammar */
+                    {
+                        ArrayList list = new18();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 19: /* reduce AAgrammar20Grammar */
+                    {
+                        ArrayList list = new19();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 20: /* reduce AAgrammar21Grammar */
+                    {
+                        ArrayList list = new20();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 21: /* reduce AAgrammar22Grammar */
+                    {
+                        ArrayList list = new21();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 22: /* reduce AAgrammar23Grammar */
+                    {
+                        ArrayList list = new22();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 23: /* reduce AAgrammar24Grammar */
+                    {
+                        ArrayList list = new23();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 24: /* reduce AAgrammar25Grammar */
+                    {
+                        ArrayList list = new24();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 25: /* reduce AAgrammar26Grammar */
+                    {
+                        ArrayList list = new25();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 26: /* reduce AAgrammar27Grammar */
+                    {
+                        ArrayList list = new26();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 27: /* reduce AAgrammar28Grammar */
+                    {
+                        ArrayList list = new27();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 28: /* reduce AAgrammar29Grammar */
+                    {
+                        ArrayList list = new28();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 29: /* reduce AAgrammar30Grammar */
+                    {
+                        ArrayList list = new29();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 30: /* reduce AAgrammar31Grammar */
+                    {
+                        ArrayList list = new30();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 31: /* reduce AAgrammar32Grammar */
+                    {
+                        ArrayList list = new31();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 32: /* reduce AAgrammar33Grammar */
+                    {
+                        ArrayList list = new32();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 33: /* reduce AAgrammar34Grammar */
+                    {
+                        ArrayList list = new33();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 34: /* reduce AAgrammar35Grammar */
+                    {
+                        ArrayList list = new34();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 35: /* reduce AAgrammar36Grammar */
+                    {
+                        ArrayList list = new35();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 36: /* reduce AAgrammar37Grammar */
+                    {
+                        ArrayList list = new36();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 37: /* reduce AAgrammar38Grammar */
+                    {
+                        ArrayList list = new37();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 38: /* reduce AAgrammar39Grammar */
+                    {
+                        ArrayList list = new38();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 39: /* reduce AAgrammar40Grammar */
+                    {
+                        ArrayList list = new39();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 40: /* reduce AAgrammar41Grammar */
+                    {
+                        ArrayList list = new40();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 41: /* reduce AAgrammar42Grammar */
+                    {
+                        ArrayList list = new41();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 42: /* reduce AAgrammar43Grammar */
+                    {
+                        ArrayList list = new42();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 43: /* reduce AAgrammar44Grammar */
+                    {
+                        ArrayList list = new43();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 44: /* reduce AAgrammar45Grammar */
+                    {
+                        ArrayList list = new44();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 45: /* reduce AAgrammar46Grammar */
+                    {
+                        ArrayList list = new45();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 46: /* reduce AAgrammar47Grammar */
+                    {
+                        ArrayList list = new46();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 47: /* reduce AAgrammar48Grammar */
+                    {
+                        ArrayList list = new47();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 48: /* reduce AAgrammar49Grammar */
+                    {
+                        ArrayList list = new48();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 49: /* reduce AAgrammar50Grammar */
+                    {
+                        ArrayList list = new49();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 50: /* reduce AAgrammar51Grammar */
+                    {
+                        ArrayList list = new50();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 51: /* reduce AAgrammar52Grammar */
+                    {
+                        ArrayList list = new51();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 52: /* reduce AAgrammar53Grammar */
+                    {
+                        ArrayList list = new52();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 53: /* reduce AAgrammar54Grammar */
+                    {
+                        ArrayList list = new53();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 54: /* reduce AAgrammar55Grammar */
+                    {
+                        ArrayList list = new54();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 55: /* reduce AAgrammar56Grammar */
+                    {
+                        ArrayList list = new55();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 56: /* reduce AAgrammar57Grammar */
+                    {
+                        ArrayList list = new56();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 57: /* reduce AAgrammar58Grammar */
+                    {
+                        ArrayList list = new57();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 58: /* reduce AAgrammar59Grammar */
+                    {
+                        ArrayList list = new58();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 59: /* reduce AAgrammar60Grammar */
+                    {
+                        ArrayList list = new59();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 60: /* reduce AAgrammar61Grammar */
+                    {
+                        ArrayList list = new60();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 61: /* reduce AAgrammar62Grammar */
+                    {
+                        ArrayList list = new61();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 62: /* reduce AAgrammar63Grammar */
+                    {
+                        ArrayList list = new62();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 63: /* reduce AAgrammar64Grammar */
+                    {
+                        ArrayList list = new63();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 64: /* reduce AAgrammar65Grammar */
+                    {
+                        ArrayList list = new64();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 65: /* reduce AAgrammar66Grammar */
+                    {
+                        ArrayList list = new65();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 66: /* reduce AAgrammar67Grammar */
+                    {
+                        ArrayList list = new66();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 67: /* reduce AAgrammar68Grammar */
+                    {
+                        ArrayList list = new67();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 68: /* reduce AAgrammar69Grammar */
+                    {
+                        ArrayList list = new68();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 69: /* reduce AAgrammar70Grammar */
+                    {
+                        ArrayList list = new69();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 70: /* reduce AAgrammar71Grammar */
+                    {
+                        ArrayList list = new70();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 71: /* reduce AAgrammar72Grammar */
+                    {
+                        ArrayList list = new71();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 72: /* reduce AAgrammar73Grammar */
+                    {
+                        ArrayList list = new72();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 73: /* reduce AAgrammar74Grammar */
+                    {
+                        ArrayList list = new73();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 74: /* reduce AAgrammar75Grammar */
+                    {
+                        ArrayList list = new74();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 75: /* reduce AAgrammar76Grammar */
+                    {
+                        ArrayList list = new75();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 76: /* reduce AAgrammar77Grammar */
+                    {
+                        ArrayList list = new76();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 77: /* reduce AAgrammar78Grammar */
+                    {
+                        ArrayList list = new77();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 78: /* reduce AAgrammar79Grammar */
+                    {
+                        ArrayList list = new78();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 79: /* reduce AAgrammar80Grammar */
+                    {
+                        ArrayList list = new79();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 80: /* reduce AAgrammar81Grammar */
+                    {
+                        ArrayList list = new80();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 81: /* reduce AAgrammar82Grammar */
+                    {
+                        ArrayList list = new81();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 82: /* reduce AAgrammar83Grammar */
+                    {
+                        ArrayList list = new82();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 83: /* reduce AAgrammar84Grammar */
+                    {
+                        ArrayList list = new83();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 84: /* reduce AAgrammar85Grammar */
+                    {
+                        ArrayList list = new84();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 85: /* reduce AAgrammar86Grammar */
+                    {
+                        ArrayList list = new85();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 86: /* reduce AAgrammar87Grammar */
+                    {
+                        ArrayList list = new86();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 87: /* reduce AAgrammar88Grammar */
+                    {
+                        ArrayList list = new87();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 88: /* reduce AAgrammar89Grammar */
+                    {
+                        ArrayList list = new88();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 89: /* reduce AAgrammar90Grammar */
+                    {
+                        ArrayList list = new89();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 90: /* reduce AAgrammar91Grammar */
+                    {
+                        ArrayList list = new90();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 91: /* reduce AAgrammar92Grammar */
+                    {
+                        ArrayList list = new91();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 92: /* reduce AAgrammar93Grammar */
+                    {
+                        ArrayList list = new92();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 93: /* reduce AAgrammar94Grammar */
+                    {
+                        ArrayList list = new93();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 94: /* reduce AAgrammar95Grammar */
+                    {
+                        ArrayList list = new94();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 95: /* reduce AAgrammar96Grammar */
+                    {
+                        ArrayList list = new95();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 96: /* reduce AAgrammar97Grammar */
+                    {
+                        ArrayList list = new96();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 97: /* reduce AAgrammar98Grammar */
+                    {
+                        ArrayList list = new97();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 98: /* reduce AAgrammar99Grammar */
+                    {
+                        ArrayList list = new98();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 99: /* reduce AAgrammar100Grammar */
+                    {
+                        ArrayList list = new99();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 100: /* reduce AAgrammar101Grammar */
+                    {
+                        ArrayList list = new100();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 101: /* reduce AAgrammar102Grammar */
+                    {
+                        ArrayList list = new101();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 102: /* reduce AAgrammar103Grammar */
+                    {
+                        ArrayList list = new102();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 103: /* reduce AAgrammar104Grammar */
+                    {
+                        ArrayList list = new103();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 104: /* reduce AAgrammar105Grammar */
+                    {
+                        ArrayList list = new104();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 105: /* reduce AAgrammar106Grammar */
+                    {
+                        ArrayList list = new105();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 106: /* reduce AAgrammar107Grammar */
+                    {
+                        ArrayList list = new106();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 107: /* reduce AAgrammar108Grammar */
+                    {
+                        ArrayList list = new107();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 108: /* reduce AAgrammar109Grammar */
+                    {
+                        ArrayList list = new108();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 109: /* reduce AAgrammar110Grammar */
+                    {
+                        ArrayList list = new109();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 110: /* reduce AAgrammar111Grammar */
+                    {
+                        ArrayList list = new110();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 111: /* reduce AAgrammar112Grammar */
+                    {
+                        ArrayList list = new111();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 112: /* reduce AAgrammar113Grammar */
+                    {
+                        ArrayList list = new112();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 113: /* reduce AAgrammar114Grammar */
+                    {
+                        ArrayList list = new113();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 114: /* reduce AAgrammar115Grammar */
+                    {
+                        ArrayList list = new114();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 115: /* reduce AAgrammar116Grammar */
+                    {
+                        ArrayList list = new115();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 116: /* reduce AAgrammar117Grammar */
+                    {
+                        ArrayList list = new116();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 117: /* reduce AAgrammar118Grammar */
+                    {
+                        ArrayList list = new117();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 118: /* reduce AAgrammar119Grammar */
+                    {
+                        ArrayList list = new118();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 119: /* reduce AAgrammar120Grammar */
+                    {
+                        ArrayList list = new119();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 120: /* reduce AAgrammar121Grammar */
+                    {
+                        ArrayList list = new120();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 121: /* reduce AAgrammar122Grammar */
+                    {
+                        ArrayList list = new121();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 122: /* reduce AAgrammar123Grammar */
+                    {
+                        ArrayList list = new122();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 123: /* reduce AAgrammar124Grammar */
+                    {
+                        ArrayList list = new123();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 124: /* reduce AAgrammar125Grammar */
+                    {
+                        ArrayList list = new124();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 125: /* reduce AAgrammar126Grammar */
+                    {
+                        ArrayList list = new125();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 126: /* reduce AAgrammar127Grammar */
+                    {
+                        ArrayList list = new126();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 127: /* reduce AAgrammar128Grammar */
+                    {
+                        ArrayList list = new127();
+                        push(goTo(0), list);
+                    }
+                    break;
+                    case 128: /* reduce APackage */
+                    {
+                        ArrayList list = new128();
+                        push(goTo(1), list);
+                    }
+                    break;
+                    case 129: /* reduce AApkgname1PkgName */
+                    {
+                        ArrayList list = new129();
+                        push(goTo(2), list);
+                    }
+                    break;
+                    case 130: /* reduce AApkgname2PkgName */
+                    {
+                        ArrayList list = new130();
+                        push(goTo(2), list);
+                    }
+                    break;
+                    case 131: /* reduce APkgNameTail */
+                    {
+                        ArrayList list = new131();
+                        push(goTo(3), list);
+                    }
+                    break;
+                    case 132: /* reduce AHelpers */
+                    {
+                        ArrayList list = new132();
+                        push(goTo(4), list);
+                    }
+                    break;
+                    case 133: /* reduce AHelperDef */
+                    {
+                        ArrayList list = new133();
+                        push(goTo(5), list);
+                    }
+                    break;
+                    case 134: /* reduce AStates */
+                    {
+                        ArrayList list = new134();
+                        push(goTo(6), list);
+                    }
+                    break;
+                    case 135: /* reduce AAidlist1IdList */
+                    {
+                        ArrayList list = new135();
+                        push(goTo(7), list);
+                    }
+                    break;
+                    case 136: /* reduce AAidlist2IdList */
+                    {
+                        ArrayList list = new136();
+                        push(goTo(7), list);
+                    }
+                    break;
+                    case 137: /* reduce AIdListTail */
+                    {
+                        ArrayList list = new137();
+                        push(goTo(8), list);
+                    }
+                    break;
+                    case 138: /* reduce ATokens */
+                    {
+                        ArrayList list = new138();
+                        push(goTo(9), list);
+                    }
+                    break;
+                    case 139: /* reduce AAtokendef1TokenDef */
+                    {
+                        ArrayList list = new139();
+                        push(goTo(10), list);
+                    }
+                    break;
+                    case 140: /* reduce AAtokendef2TokenDef */
+                    {
+                        ArrayList list = new140();
+                        push(goTo(10), list);
+                    }
+                    break;
+                    case 141: /* reduce AAtokendef3TokenDef */
+                    {
+                        ArrayList list = new141();
+                        push(goTo(10), list);
+                    }
+                    break;
+                    case 142: /* reduce AAtokendef4TokenDef */
+                    {
+                        ArrayList list = new142();
+                        push(goTo(10), list);
+                    }
+                    break;
+                    case 143: /* reduce AAstatelist1StateList */
+                    {
+                        ArrayList list = new143();
+                        push(goTo(11), list);
+                    }
+                    break;
+                    case 144: /* reduce AAstatelist2StateList */
+                    {
+                        ArrayList list = new144();
+                        push(goTo(11), list);
+                    }
+                    break;
+                    case 145: /* reduce AAstatelist3StateList */
+                    {
+                        ArrayList list = new145();
+                        push(goTo(11), list);
+                    }
+                    break;
+                    case 146: /* reduce AAstatelist4StateList */
+                    {
+                        ArrayList list = new146();
+                        push(goTo(11), list);
+                    }
+                    break;
+                    case 147: /* reduce AAstatelisttail1StateListTail */
+                    {
+                        ArrayList list = new147();
+                        push(goTo(12), list);
+                    }
+                    break;
+                    case 148: /* reduce AAstatelisttail2StateListTail */
+                    {
+                        ArrayList list = new148();
+                        push(goTo(12), list);
+                    }
+                    break;
+                    case 149: /* reduce ATransition */
+                    {
+                        ArrayList list = new149();
+                        push(goTo(13), list);
+                    }
+                    break;
+                    case 150: /* reduce AAigntokens1IgnTokens */
+                    {
+                        ArrayList list = new150();
+                        push(goTo(14), list);
+                    }
+                    break;
+                    case 151: /* reduce AAigntokens2IgnTokens */
+                    {
+                        ArrayList list = new151();
+                        push(goTo(14), list);
+                    }
+                    break;
+                    case 152: /* reduce ALookAhead */
+                    {
+                        ArrayList list = new152();
+                        push(goTo(15), list);
+                    }
+                    break;
+                    case 153: /* reduce AAregexp1RegExp */
+                    {
+                        ArrayList list = new153();
+                        push(goTo(16), list);
+                    }
+                    break;
+                    case 154: /* reduce AAregexp2RegExp */
+                    {
+                        ArrayList list = new154();
+                        push(goTo(16), list);
+                    }
+                    break;
+                    case 155: /* reduce ARegExpTail */
+                    {
+                        ArrayList list = new155();
+                        push(goTo(17), list);
+                    }
+                    break;
+                    case 156: /* reduce AAconcat1Concat */
+                    {
+                        ArrayList list = new156();
+                        push(goTo(18), list);
+                    }
+                    break;
+                    case 157: /* reduce AAconcat2Concat */
+                    {
+                        ArrayList list = new157();
+                        push(goTo(18), list);
+                    }
+                    break;
+                    case 158: /* reduce AAunexp1UnExp */
+                    {
+                        ArrayList list = new158();
+                        push(goTo(19), list);
+                    }
+                    break;
+                    case 159: /* reduce AAunexp2UnExp */
+                    {
+                        ArrayList list = new159();
+                        push(goTo(19), list);
+                    }
+                    break;
+                    case 160: /* reduce ACharBasic */
+                    {
+                        ArrayList list = new160();
+                        push(goTo(20), list);
+                    }
+                    break;
+                    case 161: /* reduce ASetBasic */
+                    {
+                        ArrayList list = new161();
+                        push(goTo(20), list);
+                    }
+                    break;
+                    case 162: /* reduce AStringBasic */
+                    {
+                        ArrayList list = new162();
+                        push(goTo(20), list);
+                    }
+                    break;
+                    case 163: /* reduce AIdBasic */
+                    {
+                        ArrayList list = new163();
+                        push(goTo(20), list);
+                    }
+                    break;
+                    case 164: /* reduce ARegExpBasic */
+                    {
+                        ArrayList list = new164();
+                        push(goTo(20), list);
+                    }
+                    break;
+                    case 165: /* reduce ACharChar */
+                    {
+                        ArrayList list = new165();
+                        push(goTo(21), list);
+                    }
+                    break;
+                    case 166: /* reduce ADecChar */
+                    {
+                        ArrayList list = new166();
+                        push(goTo(21), list);
+                    }
+                    break;
+                    case 167: /* reduce AHexChar */
+                    {
+                        ArrayList list = new167();
+                        push(goTo(21), list);
+                    }
+                    break;
+                    case 168: /* reduce AOperationSet */
+                    {
+                        ArrayList list = new168();
+                        push(goTo(22), list);
+                    }
+                    break;
+                    case 169: /* reduce AIntervalSet */
+                    {
+                        ArrayList list = new169();
+                        push(goTo(22), list);
+                    }
+                    break;
+                    case 170: /* reduce AStarUnOp */
+                    {
+                        ArrayList list = new170();
+                        push(goTo(23), list);
+                    }
+                    break;
+                    case 171: /* reduce AQMarkUnOp */
+                    {
+                        ArrayList list = new171();
+                        push(goTo(23), list);
+                    }
+                    break;
+                    case 172: /* reduce APlusUnOp */
+                    {
+                        ArrayList list = new172();
+                        push(goTo(23), list);
+                    }
+                    break;
+                    case 173: /* reduce APlusBinOp */
+                    {
+                        ArrayList list = new173();
+                        push(goTo(24), list);
+                    }
+                    break;
+                    case 174: /* reduce AMinusBinOp */
+                    {
+                        ArrayList list = new174();
+                        push(goTo(24), list);
+                    }
+                    break;
+                    case 175: /* reduce AProductions */
+                    {
+                        ArrayList list = new175();
+                        push(goTo(25), list);
+                    }
+                    break;
+                    case 176: /* reduce AAprod1Prod */
+                    {
+                        ArrayList list = new176();
+                        push(goTo(26), list);
+                    }
+                    break;
+                    case 177: /* reduce AAprod2Prod */
+                    {
+                        ArrayList list = new177();
+                        push(goTo(26), list);
+                    }
+                    break;
+                    case 178: /* reduce AAprodtransform1ProdTransform */
+                    {
+                        ArrayList list = new178();
+                        push(goTo(27), list);
+                    }
+                    break;
+                    case 179: /* reduce AAprodtransform2ProdTransform */
+                    {
+                        ArrayList list = new179();
+                        push(goTo(27), list);
+                    }
+                    break;
+                    case 180: /* reduce AAalts1Alts */
+                    {
+                        ArrayList list = new180();
+                        push(goTo(28), list);
+                    }
+                    break;
+                    case 181: /* reduce AAalts2Alts */
+                    {
+                        ArrayList list = new181();
+                        push(goTo(28), list);
+                    }
+                    break;
+                    case 182: /* reduce AAltsTail */
+                    {
+                        ArrayList list = new182();
+                        push(goTo(29), list);
+                    }
+                    break;
+                    case 183: /* reduce AAalt1Alt */
+                    {
+                        ArrayList list = new183();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 184: /* reduce AAalt2Alt */
+                    {
+                        ArrayList list = new184();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 185: /* reduce AAalt3Alt */
+                    {
+                        ArrayList list = new185();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 186: /* reduce AAalt4Alt */
+                    {
+                        ArrayList list = new186();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 187: /* reduce AAalt5Alt */
+                    {
+                        ArrayList list = new187();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 188: /* reduce AAalt6Alt */
+                    {
+                        ArrayList list = new188();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 189: /* reduce AAalt7Alt */
+                    {
+                        ArrayList list = new189();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 190: /* reduce AAalt8Alt */
+                    {
+                        ArrayList list = new190();
+                        push(goTo(30), list);
+                    }
+                    break;
+                    case 191: /* reduce AAalttransform1AltTransform */
+                    {
+                        ArrayList list = new191();
+                        push(goTo(31), list);
+                    }
+                    break;
+                    case 192: /* reduce AAalttransform2AltTransform */
+                    {
+                        ArrayList list = new192();
+                        push(goTo(31), list);
+                    }
+                    break;
+                    case 193: /* reduce AAnewterm1Term */
+                    {
+                        ArrayList list = new193();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 194: /* reduce AAnewterm2Term */
+                    {
+                        ArrayList list = new194();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 195: /* reduce AAlistterm1Term */
+                    {
+                        ArrayList list = new195();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 196: /* reduce AAlistterm2Term */
+                    {
+                        ArrayList list = new196();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 197: /* reduce AAsimpleterm1Term */
+                    {
+                        ArrayList list = new197();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 198: /* reduce AAsimpleterm2Term */
+                    {
+                        ArrayList list = new198();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 199: /* reduce AAsimpleterm3Term */
+                    {
+                        ArrayList list = new199();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 200: /* reduce AAsimpleterm4Term */
+                    {
+                        ArrayList list = new200();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 201: /* reduce ANullTerm */
+                    {
+                        ArrayList list = new201();
+                        push(goTo(32), list);
+                    }
+                    break;
+                    case 202: /* reduce AAlistoflistterm1ListOfListTerm */
+                    {
+                        ArrayList list = new202();
+                        push(goTo(33), list);
+                    }
+                    break;
+                    case 203: /* reduce AAlistoflistterm2ListOfListTerm */
+                    {
+                        ArrayList list = new203();
+                        push(goTo(33), list);
+                    }
+                    break;
+                    case 204: /* reduce AAnewlistterm1ListTerm */
+                    {
+                        ArrayList list = new204();
+                        push(goTo(34), list);
+                    }
+                    break;
+                    case 205: /* reduce AAnewlistterm2ListTerm */
+                    {
+                        ArrayList list = new205();
+                        push(goTo(34), list);
+                    }
+                    break;
+                    case 206: /* reduce AAsimplelistterm1ListTerm */
+                    {
+                        ArrayList list = new206();
+                        push(goTo(34), list);
+                    }
+                    break;
+                    case 207: /* reduce AAsimplelistterm2ListTerm */
+                    {
+                        ArrayList list = new207();
+                        push(goTo(34), list);
+                    }
+                    break;
+                    case 208: /* reduce AAsimplelistterm3ListTerm */
+                    {
+                        ArrayList list = new208();
+                        push(goTo(34), list);
+                    }
+                    break;
+                    case 209: /* reduce AAsimplelistterm4ListTerm */
+                    {
+                        ArrayList list = new209();
+                        push(goTo(34), list);
+                    }
+                    break;
+                    case 210: /* reduce AListTermTail */
+                    {
+                        ArrayList list = new210();
+                        push(goTo(35), list);
+                    }
+                    break;
+                    case 211: /* reduce ASimpleTermTail */
+                    {
+                        ArrayList list = new211();
+                        push(goTo(36), list);
+                    }
+                    break;
+                    case 212: /* reduce AAprodname1ProdName */
+                    {
+                        ArrayList list = new212();
+                        push(goTo(37), list);
+                    }
+                    break;
+                    case 213: /* reduce AAprodname2ProdName */
+                    {
+                        ArrayList list = new213();
+                        push(goTo(37), list);
+                    }
+                    break;
+                    case 214: /* reduce AProdNameTail */
+                    {
+                        ArrayList list = new214();
+                        push(goTo(38), list);
+                    }
+                    break;
+                    case 215: /* reduce AAparams1Params */
+                    {
+                        ArrayList list = new215();
+                        push(goTo(39), list);
+                    }
+                    break;
+                    case 216: /* reduce AAparams2Params */
+                    {
+                        ArrayList list = new216();
+                        push(goTo(39), list);
+                    }
+                    break;
+                    case 217: /* reduce AParamsTail */
+                    {
+                        ArrayList list = new217();
+                        push(goTo(40), list);
+                    }
+                    break;
+                    case 218: /* reduce AAltName */
+                    {
+                        ArrayList list = new218();
+                        push(goTo(41), list);
+                    }
+                    break;
+                    case 219: /* reduce AAelem1Elem */
+                    {
+                        ArrayList list = new219();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 220: /* reduce AAelem2Elem */
+                    {
+                        ArrayList list = new220();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 221: /* reduce AAelem3Elem */
+                    {
+                        ArrayList list = new221();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 222: /* reduce AAelem4Elem */
+                    {
+                        ArrayList list = new222();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 223: /* reduce AAelem5Elem */
+                    {
+                        ArrayList list = new223();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 224: /* reduce AAelem6Elem */
+                    {
+                        ArrayList list = new224();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 225: /* reduce AAelem7Elem */
+                    {
+                        ArrayList list = new225();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 226: /* reduce AAelem8Elem */
+                    {
+                        ArrayList list = new226();
+                        push(goTo(42), list);
+                    }
+                    break;
+                    case 227: /* reduce AElemName */
+                    {
+                        ArrayList list = new227();
+                        push(goTo(43), list);
+                    }
+                    break;
+                    case 228: /* reduce ATokenSpecifier */
+                    {
+                        ArrayList list = new228();
+                        push(goTo(44), list);
+                    }
+                    break;
+                    case 229: /* reduce AProductionSpecifier */
+                    {
+                        ArrayList list = new229();
+                        push(goTo(44), list);
+                    }
+                    break;
+                    case 230: /* reduce AAst */
+                    {
+                        ArrayList list = new230();
+                        push(goTo(45), list);
+                    }
+                    break;
+                    case 231: /* reduce AAstProd */
+                    {
+                        ArrayList list = new231();
+                        push(goTo(46), list);
+                    }
+                    break;
+                    case 232: /* reduce AAastalts1AstAlts */
+                    {
+                        ArrayList list = new232();
+                        push(goTo(47), list);
+                    }
+                    break;
+                    case 233: /* reduce AAastalts2AstAlts */
+                    {
+                        ArrayList list = new233();
+                        push(goTo(47), list);
+                    }
+                    break;
+                    case 234: /* reduce AAstAltsTail */
+                    {
+                        ArrayList list = new234();
+                        push(goTo(48), list);
+                    }
+                    break;
+                    case 235: /* reduce AAastalt1AstAlt */
+                    {
+                        ArrayList list = new235();
+                        push(goTo(49), list);
+                    }
+                    break;
+                    case 236: /* reduce AAastalt2AstAlt */
+                    {
+                        ArrayList list = new236();
+                        push(goTo(49), list);
+                    }
+                    break;
+                    case 237: /* reduce AAastalt3AstAlt */
+                    {
+                        ArrayList list = new237();
+                        push(goTo(49), list);
+                    }
+                    break;
+                    case 238: /* reduce AAastalt4AstAlt */
+                    {
+                        ArrayList list = new238();
+                        push(goTo(49), list);
+                    }
+                    break;
+                    case 239: /* reduce ATerminal$PkgNameTail */
+                    {
+                        ArrayList list = new239();
+                        push(goTo(50), list);
+                    }
+                    break;
+                    case 240: /* reduce ANonTerminal$PkgNameTail */
+                    {
+                        ArrayList list = new240();
+                        push(goTo(50), list);
+                    }
+                    break;
+                    case 241: /* reduce ATerminal$HelperDef */
+                    {
+                        ArrayList list = new241();
+                        push(goTo(51), list);
+                    }
+                    break;
+                    case 242: /* reduce ANonTerminal$HelperDef */
+                    {
+                        ArrayList list = new242();
+                        push(goTo(51), list);
+                    }
+                    break;
+                    case 243: /* reduce ATerminal$IdListTail */
+                    {
+                        ArrayList list = new243();
+                        push(goTo(52), list);
+                    }
+                    break;
+                    case 244: /* reduce ANonTerminal$IdListTail */
+                    {
+                        ArrayList list = new244();
+                        push(goTo(52), list);
+                    }
+                    break;
+                    case 245: /* reduce ATerminal$TokenDef */
+                    {
+                        ArrayList list = new245();
+                        push(goTo(53), list);
+                    }
+                    break;
+                    case 246: /* reduce ANonTerminal$TokenDef */
+                    {
+                        ArrayList list = new246();
+                        push(goTo(53), list);
+                    }
+                    break;
+                    case 247: /* reduce ATerminal$StateListTail */
+                    {
+                        ArrayList list = new247();
+                        push(goTo(54), list);
+                    }
+                    break;
+                    case 248: /* reduce ANonTerminal$StateListTail */
+                    {
+                        ArrayList list = new248();
+                        push(goTo(54), list);
+                    }
+                    break;
+                    case 249: /* reduce ATerminal$RegExpTail */
+                    {
+                        ArrayList list = new249();
+                        push(goTo(55), list);
+                    }
+                    break;
+                    case 250: /* reduce ANonTerminal$RegExpTail */
+                    {
+                        ArrayList list = new250();
+                        push(goTo(55), list);
+                    }
+                    break;
+                    case 251: /* reduce ATerminal$UnExp */
+                    {
+                        ArrayList list = new251();
+                        push(goTo(56), list);
+                    }
+                    break;
+                    case 252: /* reduce ANonTerminal$UnExp */
+                    {
+                        ArrayList list = new252();
+                        push(goTo(56), list);
+                    }
+                    break;
+                    case 253: /* reduce ATerminal$Prod */
+                    {
+                        ArrayList list = new253();
+                        push(goTo(57), list);
+                    }
+                    break;
+                    case 254: /* reduce ANonTerminal$Prod */
+                    {
+                        ArrayList list = new254();
+                        push(goTo(57), list);
+                    }
+                    break;
+                    case 255: /* reduce ATerminal$Elem */
+                    {
+                        ArrayList list = new255();
+                        push(goTo(58), list);
+                    }
+                    break;
+                    case 256: /* reduce ANonTerminal$Elem */
+                    {
+                        ArrayList list = new256();
+                        push(goTo(58), list);
+                    }
+                    break;
+                    case 257: /* reduce ATerminal$AltsTail */
+                    {
+                        ArrayList list = new257();
+                        push(goTo(59), list);
+                    }
+                    break;
+                    case 258: /* reduce ANonTerminal$AltsTail */
+                    {
+                        ArrayList list = new258();
+                        push(goTo(59), list);
+                    }
+                    break;
+                    case 259: /* reduce ATerminal$Term */
+                    {
+                        ArrayList list = new259();
+                        push(goTo(60), list);
+                    }
+                    break;
+                    case 260: /* reduce ANonTerminal$Term */
+                    {
+                        ArrayList list = new260();
+                        push(goTo(60), list);
+                    }
+                    break;
+                    case 261: /* reduce ATerminal$ListTermTail */
+                    {
+                        ArrayList list = new261();
+                        push(goTo(61), list);
+                    }
+                    break;
+                    case 262: /* reduce ANonTerminal$ListTermTail */
+                    {
+                        ArrayList list = new262();
+                        push(goTo(61), list);
+                    }
+                    break;
+                    case 263: /* reduce ATerminal$ParamsTail */
+                    {
+                        ArrayList list = new263();
+                        push(goTo(62), list);
+                    }
+                    break;
+                    case 264: /* reduce ANonTerminal$ParamsTail */
+                    {
+                        ArrayList list = new264();
+                        push(goTo(62), list);
+                    }
+                    break;
+                    case 265: /* reduce ATerminal$AstProd */
+                    {
+                        ArrayList list = new265();
+                        push(goTo(63), list);
+                    }
+                    break;
+                    case 266: /* reduce ANonTerminal$AstProd */
+                    {
+                        ArrayList list = new266();
+                        push(goTo(63), list);
+                    }
+                    break;
+                    case 267: /* reduce ATerminal$AstAltsTail */
+                    {
+                        ArrayList list = new267();
+                        push(goTo(64), list);
+                    }
+                    break;
+                    case 268: /* reduce ANonTerminal$AstAltsTail */
+                    {
+                        ArrayList list = new268();
+                        push(goTo(64), list);
+                    }
+                    break;
+                    }
+                    break;
+                case ACCEPT:
+                    {
+                        EOF node2 = (EOF) this.lexer.next();
+                        PGrammar node1 = (PGrammar) pop().get(0);
+                        Start node = new Start(node1, node2);
+                        return node;
+                    }
+                case ERROR:
+                    throw new ParserException(this.last_token,
+                        "[" + this.last_line + "," + this.last_pos + "] " ,
+                        Parser.errorMessages[Parser.errors[this.action[1]]]);
+            }
+        }
+    }
+
+
+
+
+    protected ArrayList new0() /* reduce AAgrammar1Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar1Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new1() /* reduce AAgrammar2Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar2Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new2() /* reduce AAgrammar3Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar3Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new3() /* reduce AAgrammar4Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar4Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new4() /* reduce AAgrammar5Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar5Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new5() /* reduce AAgrammar6Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar6Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new6() /* reduce AAgrammar7Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar7Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new7() /* reduce AAgrammar8Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar8Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new8() /* reduce AAgrammar9Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar9Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new9() /* reduce AAgrammar10Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar10Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new10() /* reduce AAgrammar11Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar11Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new11() /* reduce AAgrammar12Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar12Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new12() /* reduce AAgrammar13Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar13Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new13() /* reduce AAgrammar14Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar14Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new14() /* reduce AAgrammar15Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar15Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new15() /* reduce AAgrammar16Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar16Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new16() /* reduce AAgrammar17Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar17Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new17() /* reduce AAgrammar18Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar18Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new18() /* reduce AAgrammar19Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar19Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new19() /* reduce AAgrammar20Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar20Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new20() /* reduce AAgrammar21Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar21Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new21() /* reduce AAgrammar22Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar22Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new22() /* reduce AAgrammar23Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar23Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new23() /* reduce AAgrammar24Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar24Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new24() /* reduce AAgrammar25Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar25Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new25() /* reduce AAgrammar26Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar26Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new26() /* reduce AAgrammar27Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar27Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new27() /* reduce AAgrammar28Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar28Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new28() /* reduce AAgrammar29Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar29Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new29() /* reduce AAgrammar30Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar30Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new30() /* reduce AAgrammar31Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar31Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new31() /* reduce AAgrammar32Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar32Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new32() /* reduce AAgrammar33Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar33Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new33() /* reduce AAgrammar34Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar34Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new34() /* reduce AAgrammar35Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar35Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new35() /* reduce AAgrammar36Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar36Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new36() /* reduce AAgrammar37Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar37Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new37() /* reduce AAgrammar38Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar38Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new38() /* reduce AAgrammar39Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar39Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new39() /* reduce AAgrammar40Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar40Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new40() /* reduce AAgrammar41Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar41Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new41() /* reduce AAgrammar42Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar42Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new42() /* reduce AAgrammar43Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar43Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new43() /* reduce AAgrammar44Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar44Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new44() /* reduce AAgrammar45Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar45Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new45() /* reduce AAgrammar46Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar46Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new46() /* reduce AAgrammar47Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar47Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new47() /* reduce AAgrammar48Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar48Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new48() /* reduce AAgrammar49Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar49Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new49() /* reduce AAgrammar50Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar50Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new50() /* reduce AAgrammar51Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar51Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new51() /* reduce AAgrammar52Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar52Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new52() /* reduce AAgrammar53Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar53Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new53() /* reduce AAgrammar54Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar54Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new54() /* reduce AAgrammar55Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar55Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new55() /* reduce AAgrammar56Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar56Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new56() /* reduce AAgrammar57Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar57Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new57() /* reduce AAgrammar58Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar58Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new58() /* reduce AAgrammar59Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar59Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new59() /* reduce AAgrammar60Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar60Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new60() /* reduce AAgrammar61Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar61Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new61() /* reduce AAgrammar62Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar62Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new62() /* reduce AAgrammar63Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar63Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+          Object nullNode8 = null;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new63() /* reduce AAgrammar64Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar64Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+          Object nullNode9 = null;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new64() /* reduce AAgrammar65Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar65Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pastNode8 = (PAst)nodeArrayList1.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new65() /* reduce AAgrammar66Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar66Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pastNode9 = (PAst)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new66() /* reduce AAgrammar67Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar67Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pastNode8 = (PAst)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new67() /* reduce AAgrammar68Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar68Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pastNode9 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new68() /* reduce AAgrammar69Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar69Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        pastNode8 = (PAst)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new69() /* reduce AAgrammar70Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar70Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        pastNode9 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new70() /* reduce AAgrammar71Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar71Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new71() /* reduce AAgrammar72Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar72Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new72() /* reduce AAgrammar73Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar73Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        pastNode8 = (PAst)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new73() /* reduce AAgrammar74Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar74Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        pastNode9 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new74() /* reduce AAgrammar75Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar75Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new75() /* reduce AAgrammar76Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar76Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new76() /* reduce AAgrammar77Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar77Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new77() /* reduce AAgrammar78Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar78Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new78() /* reduce AAgrammar79Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar79Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new79() /* reduce AAgrammar80Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar80Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new80() /* reduce AAgrammar81Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar81Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        pastNode8 = (PAst)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new81() /* reduce AAgrammar82Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar82Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        pastNode9 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new82() /* reduce AAgrammar83Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar83Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new83() /* reduce AAgrammar84Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar84Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new84() /* reduce AAgrammar85Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar85Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new85() /* reduce AAgrammar86Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar86Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new86() /* reduce AAgrammar87Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar87Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new87() /* reduce AAgrammar88Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar88Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new88() /* reduce AAgrammar89Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar89Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new89() /* reduce AAgrammar90Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar90Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new90() /* reduce AAgrammar91Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar91Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new91() /* reduce AAgrammar92Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar92Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new92() /* reduce AAgrammar93Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar93Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new93() /* reduce AAgrammar94Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar94Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new94() /* reduce AAgrammar95Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar95Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+          Object nullNode7 = null;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+        pastNode8 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new95() /* reduce AAgrammar96Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar96Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+          Object nullNode8 = null;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+        pastNode9 = (PAst)nodeArrayList6.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new96() /* reduce AAgrammar97Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar97Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
+        pastNode8 = (PAst)nodeArrayList2.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new97() /* reduce AAgrammar98Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar98Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
+        pastNode9 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new98() /* reduce AAgrammar99Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar99Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new99() /* reduce AAgrammar100Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar100Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new100() /* reduce AAgrammar101Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar101Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new101() /* reduce AAgrammar102Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar102Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new102() /* reduce AAgrammar103Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar103Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new103() /* reduce AAgrammar104Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar104Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new104() /* reduce AAgrammar105Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar105Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new105() /* reduce AAgrammar106Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar106Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new106() /* reduce AAgrammar107Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar107Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new107() /* reduce AAgrammar108Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar108Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new108() /* reduce AAgrammar109Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar109Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new109() /* reduce AAgrammar110Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar110Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new110() /* reduce AAgrammar111Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar111Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+          Object nullNode6 = null;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        pastNode8 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new111() /* reduce AAgrammar112Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar112Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+          Object nullNode7 = null;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        pastNode9 = (PAst)nodeArrayList6.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new112() /* reduce AAgrammar113Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar113Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        pastNode8 = (PAst)nodeArrayList3.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new113() /* reduce AAgrammar114Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar114Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        pastNode9 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new114() /* reduce AAgrammar115Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar115Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new115() /* reduce AAgrammar116Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar116Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new116() /* reduce AAgrammar117Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar117Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new117() /* reduce AAgrammar118Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar118Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new118() /* reduce AAgrammar119Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar119Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+          Object nullNode5 = null;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        pastNode8 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new119() /* reduce AAgrammar120Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar120Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+          Object nullNode6 = null;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        pastNode9 = (PAst)nodeArrayList6.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new120() /* reduce AAgrammar121Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar121Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        pastNode8 = (PAst)nodeArrayList4.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new121() /* reduce AAgrammar122Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar122Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        pastNode9 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new122() /* reduce AAgrammar123Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar123Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+          Object nullNode4 = null;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        pastNode8 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new123() /* reduce AAgrammar124Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar124Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+          Object nullNode5 = null;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        pastNode9 = (PAst)nodeArrayList6.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new124() /* reduce AAgrammar125Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar125Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+          Object nullNode3 = null;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        pastNode8 = (PAst)nodeArrayList5.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new125() /* reduce AAgrammar126Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar126Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        pastNode9 = (PAst)nodeArrayList6.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new126() /* reduce AAgrammar127Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar127Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        PHelpers phelpersNode3;
+        PStates pstatesNode4;
+        PTokens ptokensNode5;
+        PIgnTokens pigntokensNode6;
+        PProductions pproductionsNode7;
+        PAst pastNode8;
+        {
+            // Block
+        }
+        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+        pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
+        pastNode8 = (PAst)nodeArrayList6.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new127() /* reduce AAgrammar128Grammar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAgrammar128Grammar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList7 = pop();
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PGrammar pgrammarNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        PHelpers phelpersNode4;
+        PStates pstatesNode5;
+        PTokens ptokensNode6;
+        PIgnTokens pigntokensNode7;
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+        pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
+        pastNode9 = (PAst)nodeArrayList7.get(0);
+
+        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+        }
+        nodeList.add(pgrammarNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new128() /* reduce APackage */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("APackage");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        listNode1 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode2.addAll(listNode1);
+            }else{
+                listNode2 = listNode1;
+            }
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new129() /* reduce AApkgname1PkgName */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AApkgname1PkgName");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        TPkgId tpkgidNode1;
+        tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+        if(tpkgidNode1 != null)
+        {
+            listNode2.add(tpkgidNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new130() /* reduce AApkgname2PkgName */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AApkgname2PkgName");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        TPkgId tpkgidNode1;
+        LinkedList listNode2 = new LinkedList();
+        tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(tpkgidNode1 != null)
+        {
+            listNode3.add(tpkgidNode1);
+        }
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new131() /* reduce APkgNameTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("APkgNameTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TPkgId tpkgidNode1;
+        tpkgidNode1 = (TPkgId)nodeArrayList2.get(0);
+        nodeList.add(tpkgidNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new132() /* reduce AHelpers */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AHelpers");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PHelpers phelpersNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        phelpersNode1 = new AHelpers(listNode3);
+        }
+        nodeList.add(phelpersNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new133() /* reduce AHelperDef */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AHelperDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PHelperDef phelperdefNode1;
+        {
+            // Block
+        TId tidNode2;
+        PRegExp pregexpNode3;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        pregexpNode3 = (PRegExp)nodeArrayList3.get(0);
+
+        phelperdefNode1 = new AHelperDef(tidNode2, pregexpNode3);
+        }
+        nodeList.add(phelperdefNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new134() /* reduce AStates */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AStates");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PStates pstatesNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        pstatesNode1 = new AStates(listNode3);
+        }
+        nodeList.add(pstatesNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new135() /* reduce AAidlist1IdList */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAidlist1IdList");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        TId tidNode1;
+        tidNode1 = (TId)nodeArrayList1.get(0);
+        if(tidNode1 != null)
+        {
+            listNode2.add(tidNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new136() /* reduce AAidlist2IdList */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAidlist2IdList");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        TId tidNode1;
+        LinkedList listNode2 = new LinkedList();
+        tidNode1 = (TId)nodeArrayList1.get(0);
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(tidNode1 != null)
+        {
+            listNode3.add(tidNode1);
+        }
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new137() /* reduce AIdListTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AIdListTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TId tidNode1;
+        tidNode1 = (TId)nodeArrayList2.get(0);
+        nodeList.add(tidNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new138() /* reduce ATokens */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATokens");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTokens ptokensNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        ptokensNode1 = new ATokens(listNode3);
+        }
+        nodeList.add(ptokensNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new139() /* reduce AAtokendef1TokenDef */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAtokendef1TokenDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTokenDef ptokendefNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        TId tidNode3;
+        PRegExp pregexpNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        tidNode3 = (TId)nodeArrayList1.get(0);
+        pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
+
+        ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, null, null);
+        }
+        nodeList.add(ptokendefNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new140() /* reduce AAtokendef2TokenDef */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAtokendef2TokenDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTokenDef ptokendefNode1;
+        {
+            // Block
+        PStateList pstatelistNode2;
+        TId tidNode3;
+        PRegExp pregexpNode4;
+          Object nullNode5 = null;
+          Object nullNode6 = null;
+        pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
+        tidNode3 = (TId)nodeArrayList2.get(0);
+        pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
+
+        ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, null, null);
+        }
+        nodeList.add(ptokendefNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new141() /* reduce AAtokendef3TokenDef */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAtokendef3TokenDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTokenDef ptokendefNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        TId tidNode3;
+        PRegExp pregexpNode4;
+        TSlash tslashNode5;
+        PRegExp pregexpNode6;
+        tidNode3 = (TId)nodeArrayList1.get(0);
+        pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
+        tslashNode5 = (TSlash)nodeArrayList4.get(0);
+        pregexpNode6 = (PRegExp)nodeArrayList4.get(1);
+
+        ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
+        }
+        nodeList.add(ptokendefNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new142() /* reduce AAtokendef4TokenDef */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAtokendef4TokenDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList6 = pop();
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTokenDef ptokendefNode1;
+        {
+            // Block
+        PStateList pstatelistNode2;
+        TId tidNode3;
+        PRegExp pregexpNode4;
+        TSlash tslashNode5;
+        PRegExp pregexpNode6;
+        pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
+        tidNode3 = (TId)nodeArrayList2.get(0);
+        pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
+        tslashNode5 = (TSlash)nodeArrayList5.get(0);
+        pregexpNode6 = (PRegExp)nodeArrayList5.get(1);
+
+        ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
+        }
+        nodeList.add(ptokendefNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new143() /* reduce AAstatelist1StateList */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstatelist1StateList");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PStateList pstatelistNode1;
+        {
+            // Block
+        TId tidNode2;
+          Object nullNode3 = null;
+        LinkedList listNode4 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList2.get(0);
+        {
+            // Block
+        }
+
+        pstatelistNode1 = new AStateList(tidNode2, null, listNode4);
+        }
+        nodeList.add(pstatelistNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new144() /* reduce AAstatelist2StateList */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstatelist2StateList");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PStateList pstatelistNode1;
+        {
+            // Block
+        TId tidNode2;
+        PTransition ptransitionNode3;
+        LinkedList listNode4 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList2.get(0);
+        ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+        {
+            // Block
+        }
+
+        pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode4);
+        }
+        nodeList.add(pstatelistNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new145() /* reduce AAstatelist3StateList */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstatelist3StateList");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PStateList pstatelistNode1;
+        {
+            // Block
+        TId tidNode2;
+          Object nullNode3 = null;
+        LinkedList listNode5 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList2.get(0);
+        {
+            // Block
+        LinkedList listNode4 = new LinkedList();
+        listNode4 = (LinkedList)nodeArrayList3.get(0);
+        if(listNode4 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode5.addAll(listNode4);
+            }else{
+                listNode5 = listNode4;
+            }
+        }
+        }
+
+        pstatelistNode1 = new AStateList(tidNode2, null, listNode5);
+        }
+        nodeList.add(pstatelistNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new146() /* reduce AAstatelist4StateList */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstatelist4StateList");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PStateList pstatelistNode1;
+        {
+            // Block
+        TId tidNode2;
+        PTransition ptransitionNode3;
+        LinkedList listNode5 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList2.get(0);
+        ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+        {
+            // Block
+        LinkedList listNode4 = new LinkedList();
+        listNode4 = (LinkedList)nodeArrayList4.get(0);
+        if(listNode4 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode5.addAll(listNode4);
+            }else{
+                listNode5 = listNode4;
+            }
+        }
+        }
+
+        pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode5);
+        }
+        nodeList.add(pstatelistNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new147() /* reduce AAstatelisttail1StateListTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstatelisttail1StateListTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PStateListTail pstatelisttailNode1;
+        {
+            // Block
+        TId tidNode2;
+          Object nullNode3 = null;
+        tidNode2 = (TId)nodeArrayList2.get(0);
+
+        pstatelisttailNode1 = new AStateListTail(tidNode2, null);
+        }
+        nodeList.add(pstatelisttailNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new148() /* reduce AAstatelisttail2StateListTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstatelisttail2StateListTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PStateListTail pstatelisttailNode1;
+        {
+            // Block
+        TId tidNode2;
+        PTransition ptransitionNode3;
+        tidNode2 = (TId)nodeArrayList2.get(0);
+        ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+
+        pstatelisttailNode1 = new AStateListTail(tidNode2, ptransitionNode3);
+        }
+        nodeList.add(pstatelisttailNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new149() /* reduce ATransition */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATransition");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTransition ptransitionNode1;
+        {
+            // Block
+        TId tidNode2;
+        tidNode2 = (TId)nodeArrayList2.get(0);
+
+        ptransitionNode1 = new ATransition(tidNode2);
+        }
+        nodeList.add(ptransitionNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new150() /* reduce AAigntokens1IgnTokens */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAigntokens1IgnTokens");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PIgnTokens pigntokensNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        }
+
+        pigntokensNode1 = new AIgnTokens(listNode2);
+        }
+        nodeList.add(pigntokensNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new151() /* reduce AAigntokens2IgnTokens */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAigntokens2IgnTokens");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PIgnTokens pigntokensNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList3.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        pigntokensNode1 = new AIgnTokens(listNode3);
+        }
+        nodeList.add(pigntokensNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new152() /* reduce ALookAhead */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ALookAhead");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TSlash tslashNode1;
+        PRegExp pregexpNode2;
+        tslashNode1 = (TSlash)nodeArrayList1.get(0);
+        pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
+        nodeList.add(tslashNode1);
+        nodeList.add(pregexpNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new153() /* reduce AAregexp1RegExp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAregexp1RegExp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PRegExp pregexpNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        PConcat pconcatNode2;
+        pconcatNode2 = (PConcat)nodeArrayList1.get(0);
+        if(pconcatNode2 != null)
+        {
+            listNode3.add(pconcatNode2);
+        }
+        }
+
+        pregexpNode1 = new ARegExp(listNode3);
+        }
+        nodeList.add(pregexpNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new154() /* reduce AAregexp2RegExp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAregexp2RegExp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PRegExp pregexpNode1;
+        {
+            // Block
+        LinkedList listNode4 = new LinkedList();
+        {
+            // Block
+        PConcat pconcatNode2;
+        LinkedList listNode3 = new LinkedList();
+        pconcatNode2 = (PConcat)nodeArrayList1.get(0);
+        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        if(pconcatNode2 != null)
+        {
+            listNode4.add(pconcatNode2);
+        }
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+
+        pregexpNode1 = new ARegExp(listNode4);
+        }
+        nodeList.add(pregexpNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new155() /* reduce ARegExpTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ARegExpTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PConcat pconcatNode1;
+        pconcatNode1 = (PConcat)nodeArrayList2.get(0);
+        nodeList.add(pconcatNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new156() /* reduce AAconcat1Concat */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAconcat1Concat");
+        ArrayList nodeList = new ArrayList();
+
+        PConcat pconcatNode1;
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        }
+
+        pconcatNode1 = new AConcat(listNode2);
+        }
+        nodeList.add(pconcatNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new157() /* reduce AAconcat2Concat */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAconcat2Concat");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PConcat pconcatNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        pconcatNode1 = new AConcat(listNode3);
+        }
+        nodeList.add(pconcatNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new158() /* reduce AAunexp1UnExp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAunexp1UnExp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PUnExp punexpNode1;
+        {
+            // Block
+        PBasic pbasicNode2;
+          Object nullNode3 = null;
+        pbasicNode2 = (PBasic)nodeArrayList1.get(0);
+
+        punexpNode1 = new AUnExp(pbasicNode2, null);
+        }
+        nodeList.add(punexpNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new159() /* reduce AAunexp2UnExp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAunexp2UnExp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PUnExp punexpNode1;
+        {
+            // Block
+        PBasic pbasicNode2;
+        PUnOp punopNode3;
+        pbasicNode2 = (PBasic)nodeArrayList1.get(0);
+        punopNode3 = (PUnOp)nodeArrayList2.get(0);
+
+        punexpNode1 = new AUnExp(pbasicNode2, punopNode3);
+        }
+        nodeList.add(punexpNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new160() /* reduce ACharBasic */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ACharBasic");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PBasic pbasicNode1;
+        {
+            // Block
+        PChar pcharNode2;
+        pcharNode2 = (PChar)nodeArrayList1.get(0);
+
+        pbasicNode1 = new ACharBasic(pcharNode2);
+        }
+        nodeList.add(pbasicNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new161() /* reduce ASetBasic */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ASetBasic");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PBasic pbasicNode1;
+        {
+            // Block
+        PSet psetNode2;
+        psetNode2 = (PSet)nodeArrayList1.get(0);
+
+        pbasicNode1 = new ASetBasic(psetNode2);
+        }
+        nodeList.add(pbasicNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new162() /* reduce AStringBasic */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AStringBasic");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PBasic pbasicNode1;
+        {
+            // Block
+        TString tstringNode2;
+        tstringNode2 = (TString)nodeArrayList1.get(0);
+
+        pbasicNode1 = new AStringBasic(tstringNode2);
+        }
+        nodeList.add(pbasicNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new163() /* reduce AIdBasic */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AIdBasic");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PBasic pbasicNode1;
+        {
+            // Block
+        TId tidNode2;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+
+        pbasicNode1 = new AIdBasic(tidNode2);
+        }
+        nodeList.add(pbasicNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new164() /* reduce ARegExpBasic */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ARegExpBasic");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PBasic pbasicNode1;
+        {
+            // Block
+        PRegExp pregexpNode2;
+        pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
+
+        pbasicNode1 = new ARegExpBasic(pregexpNode2);
+        }
+        nodeList.add(pbasicNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new165() /* reduce ACharChar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ACharChar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PChar pcharNode1;
+        {
+            // Block
+        TChar tcharNode2;
+        tcharNode2 = (TChar)nodeArrayList1.get(0);
+
+        pcharNode1 = new ACharChar(tcharNode2);
+        }
+        nodeList.add(pcharNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new166() /* reduce ADecChar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ADecChar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PChar pcharNode1;
+        {
+            // Block
+        TDecChar tdeccharNode2;
+        tdeccharNode2 = (TDecChar)nodeArrayList1.get(0);
+
+        pcharNode1 = new ADecChar(tdeccharNode2);
+        }
+        nodeList.add(pcharNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new167() /* reduce AHexChar */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AHexChar");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PChar pcharNode1;
+        {
+            // Block
+        THexChar thexcharNode2;
+        thexcharNode2 = (THexChar)nodeArrayList1.get(0);
+
+        pcharNode1 = new AHexChar(thexcharNode2);
+        }
+        nodeList.add(pcharNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new168() /* reduce AOperationSet */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AOperationSet");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PSet psetNode1;
+        {
+            // Block
+        PBasic pbasicNode2;
+        PBinOp pbinopNode3;
+        PBasic pbasicNode4;
+        pbasicNode2 = (PBasic)nodeArrayList2.get(0);
+        pbinopNode3 = (PBinOp)nodeArrayList3.get(0);
+        pbasicNode4 = (PBasic)nodeArrayList4.get(0);
+
+        psetNode1 = new AOperationSet(pbasicNode2, pbinopNode3, pbasicNode4);
+        }
+        nodeList.add(psetNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new169() /* reduce AIntervalSet */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AIntervalSet");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PSet psetNode1;
+        {
+            // Block
+        PChar pcharNode2;
+        PChar pcharNode3;
+        pcharNode2 = (PChar)nodeArrayList2.get(0);
+        pcharNode3 = (PChar)nodeArrayList4.get(0);
+
+        psetNode1 = new AIntervalSet(pcharNode2, pcharNode3);
+        }
+        nodeList.add(psetNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new170() /* reduce AStarUnOp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AStarUnOp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PUnOp punopNode1;
+        {
+            // Block
+        TStar tstarNode2;
+        tstarNode2 = (TStar)nodeArrayList1.get(0);
+
+        punopNode1 = new AStarUnOp(tstarNode2);
+        }
+        nodeList.add(punopNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new171() /* reduce AQMarkUnOp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AQMarkUnOp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PUnOp punopNode1;
+        {
+            // Block
+        TQMark tqmarkNode2;
+        tqmarkNode2 = (TQMark)nodeArrayList1.get(0);
+
+        punopNode1 = new AQMarkUnOp(tqmarkNode2);
+        }
+        nodeList.add(punopNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new172() /* reduce APlusUnOp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("APlusUnOp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PUnOp punopNode1;
+        {
+            // Block
+        TPlus tplusNode2;
+        tplusNode2 = (TPlus)nodeArrayList1.get(0);
+
+        punopNode1 = new APlusUnOp(tplusNode2);
+        }
+        nodeList.add(punopNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new173() /* reduce APlusBinOp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("APlusBinOp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PBinOp pbinopNode1;
+        {
+            // Block
+
+        pbinopNode1 = new APlusBinOp();
+        }
+        nodeList.add(pbinopNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new174() /* reduce AMinusBinOp */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AMinusBinOp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PBinOp pbinopNode1;
+        {
+            // Block
+
+        pbinopNode1 = new AMinusBinOp();
+        }
+        nodeList.add(pbinopNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new175() /* reduce AProductions */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AProductions");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PProductions pproductionsNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        pproductionsNode1 = new AProductions(listNode3);
+        }
+        nodeList.add(pproductionsNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new176() /* reduce AAprod1Prod */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAprod1Prod");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PProd pprodNode1;
+        {
+            // Block
+        TId tidNode2;
+          Object nullNode3 = null;
+        LinkedList listNode4 = new LinkedList();
+        LinkedList listNode6 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        {
+            // Block
+        }
+        {
+            // Block
+        LinkedList listNode5 = new LinkedList();
+        listNode5 = (LinkedList)nodeArrayList3.get(0);
+        if(listNode5 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode6.addAll(listNode5);
+            }else{
+                listNode6 = listNode5;
+            }
+        }
+        }
+
+        pprodNode1 = new AProd(tidNode2, null, listNode4, listNode6);
+        }
+        nodeList.add(pprodNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new177() /* reduce AAprod2Prod */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAprod2Prod");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PProd pprodNode1;
+        {
+            // Block
+        TId tidNode2;
+        TArrow tarrowNode3;
+        LinkedList listNode5 = new LinkedList();
+        LinkedList listNode7 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        tarrowNode3 = (TArrow)nodeArrayList2.get(0);
+        {
+            // Block
+        LinkedList listNode4 = new LinkedList();
+        listNode4 = (LinkedList)nodeArrayList2.get(1);
+        if(listNode4 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode5.addAll(listNode4);
+            }else{
+                listNode5 = listNode4;
+            }
+        }
+        }
+        {
+            // Block
+        LinkedList listNode6 = new LinkedList();
+        listNode6 = (LinkedList)nodeArrayList4.get(0);
+        if(listNode6 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode7.addAll(listNode6);
+            }else{
+                listNode7 = listNode6;
+            }
+        }
+        }
+
+        pprodNode1 = new AProd(tidNode2, tarrowNode3, listNode5, listNode7);
+        }
+        nodeList.add(pprodNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new178() /* reduce AAprodtransform1ProdTransform */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAprodtransform1ProdTransform");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TArrow tarrowNode1;
+        LinkedList listNode2 = new LinkedList();
+        tarrowNode1 = (TArrow)nodeArrayList2.get(0);
+        {
+            // Block
+        }
+        nodeList.add(tarrowNode1);
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new179() /* reduce AAprodtransform2ProdTransform */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAprodtransform2ProdTransform");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TArrow tarrowNode1;
+        LinkedList listNode3 = new LinkedList();
+        tarrowNode1 = (TArrow)nodeArrayList2.get(0);
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList3.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        nodeList.add(tarrowNode1);
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new180() /* reduce AAalts1Alts */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalts1Alts");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PAlt paltNode1;
+        paltNode1 = (PAlt)nodeArrayList1.get(0);
+        if(paltNode1 != null)
+        {
+            listNode2.add(paltNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new181() /* reduce AAalts2Alts */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalts2Alts");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        PAlt paltNode1;
+        LinkedList listNode2 = new LinkedList();
+        paltNode1 = (PAlt)nodeArrayList1.get(0);
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(paltNode1 != null)
+        {
+            listNode3.add(paltNode1);
+        }
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new182() /* reduce AAltsTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAltsTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        paltNode1 = (PAlt)nodeArrayList2.get(0);
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new183() /* reduce AAalt1Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt1Alt");
+        ArrayList nodeList = new ArrayList();
+
+        PAlt paltNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        {
+            // Block
+        }
+
+        paltNode1 = new AAlt(null, listNode3, null);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new184() /* reduce AAalt2Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt2Alt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        {
+            // Block
+        TId tidNode2;
+        LinkedList listNode3 = new LinkedList();
+          Object nullNode4 = null;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        {
+            // Block
+        }
+
+        paltNode1 = new AAlt(tidNode2, listNode3, null);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new185() /* reduce AAalt3Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt3Alt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        LinkedList listNode4 = new LinkedList();
+          Object nullNode5 = null;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+
+        paltNode1 = new AAlt(null, listNode4, null);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new186() /* reduce AAalt4Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt4Alt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        {
+            // Block
+        TId tidNode2;
+        LinkedList listNode4 = new LinkedList();
+          Object nullNode5 = null;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+
+        paltNode1 = new AAlt(tidNode2, listNode4, null);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new187() /* reduce AAalt5Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt5Alt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        LinkedList listNode3 = new LinkedList();
+        PAltTransform palttransformNode4;
+        {
+            // Block
+        }
+        palttransformNode4 = (PAltTransform)nodeArrayList1.get(0);
+
+        paltNode1 = new AAlt(null, listNode3, palttransformNode4);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new188() /* reduce AAalt6Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt6Alt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        {
+            // Block
+        TId tidNode2;
+        LinkedList listNode3 = new LinkedList();
+        PAltTransform palttransformNode4;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        {
+            // Block
+        }
+        palttransformNode4 = (PAltTransform)nodeArrayList2.get(0);
+
+        paltNode1 = new AAlt(tidNode2, listNode3, palttransformNode4);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new189() /* reduce AAalt7Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt7Alt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        LinkedList listNode4 = new LinkedList();
+        PAltTransform palttransformNode5;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+        palttransformNode5 = (PAltTransform)nodeArrayList2.get(0);
+
+        paltNode1 = new AAlt(null, listNode4, palttransformNode5);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new190() /* reduce AAalt8Alt */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalt8Alt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAlt paltNode1;
+        {
+            // Block
+        TId tidNode2;
+        LinkedList listNode4 = new LinkedList();
+        PAltTransform palttransformNode5;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+        palttransformNode5 = (PAltTransform)nodeArrayList3.get(0);
+
+        paltNode1 = new AAlt(tidNode2, listNode4, palttransformNode5);
+        }
+        nodeList.add(paltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new191() /* reduce AAalttransform1AltTransform */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalttransform1AltTransform");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAltTransform palttransformNode1;
+        {
+            // Block
+        TLBrace tlbraceNode2;
+        LinkedList listNode3 = new LinkedList();
+        TRBrace trbraceNode4;
+        tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
+        {
+            // Block
+        }
+        trbraceNode4 = (TRBrace)nodeArrayList3.get(0);
+
+        palttransformNode1 = new AAltTransform(tlbraceNode2, listNode3, trbraceNode4);
+        }
+        nodeList.add(palttransformNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new192() /* reduce AAalttransform2AltTransform */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAalttransform2AltTransform");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAltTransform palttransformNode1;
+        {
+            // Block
+        TLBrace tlbraceNode2;
+        LinkedList listNode4 = new LinkedList();
+        TRBrace trbraceNode5;
+        tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList3.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+        trbraceNode5 = (TRBrace)nodeArrayList4.get(0);
+
+        palttransformNode1 = new AAltTransform(tlbraceNode2, listNode4, trbraceNode5);
+        }
+        nodeList.add(palttransformNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new193() /* reduce AAnewterm1Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAnewterm1Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+        PProdName pprodnameNode2;
+        TLPar tlparNode3;
+        LinkedList listNode4 = new LinkedList();
+        pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        {
+            // Block
+        }
+
+        ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode4);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new194() /* reduce AAnewterm2Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAnewterm2Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+        PProdName pprodnameNode2;
+        TLPar tlparNode3;
+        LinkedList listNode5 = new LinkedList();
+        pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        {
+            // Block
+        LinkedList listNode4 = new LinkedList();
+        listNode4 = (LinkedList)nodeArrayList4.get(0);
+        if(listNode4 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode5.addAll(listNode4);
+            }else{
+                listNode5 = listNode4;
+            }
+        }
+        }
+
+        ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode5);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new195() /* reduce AAlistterm1Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAlistterm1Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+        TLBkt tlbktNode2;
+        LinkedList listNode3 = new LinkedList();
+        tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
+        {
+            // Block
+        }
+
+        ptermNode1 = new AListTerm(tlbktNode2, listNode3);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new196() /* reduce AAlistterm2Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAlistterm2Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+        TLBkt tlbktNode2;
+        LinkedList listNode4 = new LinkedList();
+        tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+
+        ptermNode1 = new AListTerm(tlbktNode2, listNode4);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new197() /* reduce AAsimpleterm1Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimpleterm1Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        TId tidNode3;
+          Object nullNode4 = null;
+        tidNode3 = (TId)nodeArrayList1.get(0);
+
+        ptermNode1 = new ASimpleTerm(null, tidNode3, null);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new198() /* reduce AAsimpleterm2Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimpleterm2Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+        PSpecifier pspecifierNode2;
+        TId tidNode3;
+          Object nullNode4 = null;
+        pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        tidNode3 = (TId)nodeArrayList2.get(0);
+
+        ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, null);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new199() /* reduce AAsimpleterm3Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimpleterm3Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        TId tidNode3;
+        TId tidNode4;
+        tidNode3 = (TId)nodeArrayList1.get(0);
+        tidNode4 = (TId)nodeArrayList2.get(0);
+
+        ptermNode1 = new ASimpleTerm(null, tidNode3, tidNode4);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new200() /* reduce AAsimpleterm4Term */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimpleterm4Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+        PSpecifier pspecifierNode2;
+        TId tidNode3;
+        TId tidNode4;
+        pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        tidNode3 = (TId)nodeArrayList2.get(0);
+        tidNode4 = (TId)nodeArrayList3.get(0);
+
+        ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, tidNode4);
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new201() /* reduce ANullTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANullTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        {
+            // Block
+
+        ptermNode1 = new ANullTerm();
+        }
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new202() /* reduce AAlistoflistterm1ListOfListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAlistoflistterm1ListOfListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PListTerm plisttermNode1;
+        plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+        if(plisttermNode1 != null)
+        {
+            listNode2.add(plisttermNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new203() /* reduce AAlistoflistterm2ListOfListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAlistoflistterm2ListOfListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        PListTerm plisttermNode1;
+        LinkedList listNode2 = new LinkedList();
+        plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(plisttermNode1 != null)
+        {
+            listNode3.add(plisttermNode1);
+        }
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new204() /* reduce AAnewlistterm1ListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAnewlistterm1ListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PListTerm plisttermNode1;
+        {
+            // Block
+        PProdName pprodnameNode2;
+        TLPar tlparNode3;
+        LinkedList listNode4 = new LinkedList();
+        pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        {
+            // Block
+        }
+
+        plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode4);
+        }
+        nodeList.add(plisttermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new205() /* reduce AAnewlistterm2ListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAnewlistterm2ListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList5 = pop();
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PListTerm plisttermNode1;
+        {
+            // Block
+        PProdName pprodnameNode2;
+        TLPar tlparNode3;
+        LinkedList listNode5 = new LinkedList();
+        pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        {
+            // Block
+        LinkedList listNode4 = new LinkedList();
+        listNode4 = (LinkedList)nodeArrayList4.get(0);
+        if(listNode4 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode5.addAll(listNode4);
+            }else{
+                listNode5 = listNode4;
+            }
+        }
+        }
+
+        plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode5);
+        }
+        nodeList.add(plisttermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new206() /* reduce AAsimplelistterm1ListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimplelistterm1ListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PListTerm plisttermNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        TId tidNode3;
+          Object nullNode4 = null;
+        tidNode3 = (TId)nodeArrayList1.get(0);
+
+        plisttermNode1 = new ASimpleListTerm(null, tidNode3, null);
+        }
+        nodeList.add(plisttermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new207() /* reduce AAsimplelistterm2ListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimplelistterm2ListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PListTerm plisttermNode1;
+        {
+            // Block
+        PSpecifier pspecifierNode2;
+        TId tidNode3;
+          Object nullNode4 = null;
+        pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        tidNode3 = (TId)nodeArrayList2.get(0);
+
+        plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, null);
+        }
+        nodeList.add(plisttermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new208() /* reduce AAsimplelistterm3ListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimplelistterm3ListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PListTerm plisttermNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        TId tidNode3;
+        TId tidNode4;
+        tidNode3 = (TId)nodeArrayList1.get(0);
+        tidNode4 = (TId)nodeArrayList2.get(0);
+
+        plisttermNode1 = new ASimpleListTerm(null, tidNode3, tidNode4);
+        }
+        nodeList.add(plisttermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new209() /* reduce AAsimplelistterm4ListTerm */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAsimplelistterm4ListTerm");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PListTerm plisttermNode1;
+        {
+            // Block
+        PSpecifier pspecifierNode2;
+        TId tidNode3;
+        TId tidNode4;
+        pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        tidNode3 = (TId)nodeArrayList2.get(0);
+        tidNode4 = (TId)nodeArrayList3.get(0);
+
+        plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, tidNode4);
+        }
+        nodeList.add(plisttermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new210() /* reduce AListTermTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AListTermTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PListTerm plisttermNode1;
+        plisttermNode1 = (PListTerm)nodeArrayList2.get(0);
+        nodeList.add(plisttermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new211() /* reduce ASimpleTermTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ASimpleTermTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TId tidNode1;
+        tidNode1 = (TId)nodeArrayList2.get(0);
+        nodeList.add(tidNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new212() /* reduce AAprodname1ProdName */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAprodname1ProdName");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PProdName pprodnameNode1;
+        {
+            // Block
+        TId tidNode2;
+          Object nullNode3 = null;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+
+        pprodnameNode1 = new AProdName(tidNode2, null);
+        }
+        nodeList.add(pprodnameNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new213() /* reduce AAprodname2ProdName */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAprodname2ProdName");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PProdName pprodnameNode1;
+        {
+            // Block
+        TId tidNode2;
+        TId tidNode3;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        tidNode3 = (TId)nodeArrayList2.get(0);
+
+        pprodnameNode1 = new AProdName(tidNode2, tidNode3);
+        }
+        nodeList.add(pprodnameNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new214() /* reduce AProdNameTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AProdNameTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TId tidNode1;
+        tidNode1 = (TId)nodeArrayList2.get(0);
+        nodeList.add(tidNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new215() /* reduce AAparams1Params */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAparams1Params");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PTerm ptermNode1;
+        ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        if(ptermNode1 != null)
+        {
+            listNode2.add(ptermNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new216() /* reduce AAparams2Params */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAparams2Params");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        PTerm ptermNode1;
+        LinkedList listNode2 = new LinkedList();
+        ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(ptermNode1 != null)
+        {
+            listNode3.add(ptermNode1);
+        }
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new217() /* reduce AParamsTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AParamsTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PTerm ptermNode1;
+        ptermNode1 = (PTerm)nodeArrayList2.get(0);
+        nodeList.add(ptermNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new218() /* reduce AAltName */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAltName");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TId tidNode1;
+        tidNode1 = (TId)nodeArrayList2.get(0);
+        nodeList.add(tidNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new219() /* reduce AAelem1Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem1Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+          Object nullNode3 = null;
+        TId tidNode4;
+          Object nullNode5 = null;
+        tidNode4 = (TId)nodeArrayList1.get(0);
+
+        pelemNode1 = new AElem(null, null, tidNode4, null);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new220() /* reduce AAelem2Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem2Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+        TId tidNode2;
+          Object nullNode3 = null;
+        TId tidNode4;
+          Object nullNode5 = null;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        tidNode4 = (TId)nodeArrayList2.get(0);
+
+        pelemNode1 = new AElem(tidNode2, null, tidNode4, null);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new221() /* reduce AAelem3Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem3Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        PSpecifier pspecifierNode3;
+        TId tidNode4;
+          Object nullNode5 = null;
+        pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
+        tidNode4 = (TId)nodeArrayList2.get(0);
+
+        pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, null);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new222() /* reduce AAelem4Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem4Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+        TId tidNode2;
+        PSpecifier pspecifierNode3;
+        TId tidNode4;
+          Object nullNode5 = null;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
+        tidNode4 = (TId)nodeArrayList3.get(0);
+
+        pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, null);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new223() /* reduce AAelem5Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem5Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+          Object nullNode3 = null;
+        TId tidNode4;
+        PUnOp punopNode5;
+        tidNode4 = (TId)nodeArrayList1.get(0);
+        punopNode5 = (PUnOp)nodeArrayList2.get(0);
+
+        pelemNode1 = new AElem(null, null, tidNode4, punopNode5);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new224() /* reduce AAelem6Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem6Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+        TId tidNode2;
+          Object nullNode3 = null;
+        TId tidNode4;
+        PUnOp punopNode5;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        tidNode4 = (TId)nodeArrayList2.get(0);
+        punopNode5 = (PUnOp)nodeArrayList3.get(0);
+
+        pelemNode1 = new AElem(tidNode2, null, tidNode4, punopNode5);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new225() /* reduce AAelem7Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem7Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        PSpecifier pspecifierNode3;
+        TId tidNode4;
+        PUnOp punopNode5;
+        pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
+        tidNode4 = (TId)nodeArrayList2.get(0);
+        punopNode5 = (PUnOp)nodeArrayList3.get(0);
+
+        pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, punopNode5);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new226() /* reduce AAelem8Elem */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAelem8Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PElem pelemNode1;
+        {
+            // Block
+        TId tidNode2;
+        PSpecifier pspecifierNode3;
+        TId tidNode4;
+        PUnOp punopNode5;
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
+        tidNode4 = (TId)nodeArrayList3.get(0);
+        punopNode5 = (PUnOp)nodeArrayList4.get(0);
+
+        pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, punopNode5);
+        }
+        nodeList.add(pelemNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new227() /* reduce AElemName */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AElemName");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        TId tidNode1;
+        tidNode1 = (TId)nodeArrayList2.get(0);
+        nodeList.add(tidNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new228() /* reduce ATokenSpecifier */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATokenSpecifier");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PSpecifier pspecifierNode1;
+        {
+            // Block
+
+        pspecifierNode1 = new ATokenSpecifier();
+        }
+        nodeList.add(pspecifierNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new229() /* reduce AProductionSpecifier */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AProductionSpecifier");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PSpecifier pspecifierNode1;
+        {
+            // Block
+
+        pspecifierNode1 = new AProductionSpecifier();
+        }
+        nodeList.add(pspecifierNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new230() /* reduce AAst */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAst");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAst pastNode1;
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode2 = new LinkedList();
+        listNode2 = (LinkedList)nodeArrayList4.get(0);
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
+        }
+
+        pastNode1 = new AAst(listNode3);
+        }
+        nodeList.add(pastNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+
+    protected ArrayList new231() /* reduce AAstProd */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstProd");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList4 = pop();
+        ArrayList nodeArrayList3 = pop();
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAstProd pastprodNode1;
+        {
+            // Block
+        TId tidNode2;
+        LinkedList listNode4 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        {
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList3.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+
+        pastprodNode1 = new AAstProd(tidNode2, listNode4);
+        }
+        nodeList.add(pastprodNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
 
-    if(!stack.hasNext())
+    protected ArrayList new232() /* reduce AAastalts1AstAlts */
     {
-      stack.add(new State(numstate, this.nodeList));
-      return;
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAastalts1AstAlts");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PAstAlt pastaltNode1;
+        pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+        if(pastaltNode1 != null)
+        {
+            listNode2.add(pastaltNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
     }
 
-    State s = (State) stack.next();
-    s.state = numstate;
-    s.nodes = this.nodeList;
-  }
 
-  private int goTo(int index)
-  {
-    int state = state();
-    int low = 1;
-    int high = gotoTable[index].length - 1;
-    int value = gotoTable[index][0][1];
 
-    while(low <= high)
+    protected ArrayList new233() /* reduce AAastalts2AstAlts */
     {
-      int middle = (low + high) / 2;
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAastalts2AstAlts");
+        ArrayList nodeList = new ArrayList();
 
-      if(state < gotoTable[index][middle][0])
-      {
-        high = middle - 1;
-      }
-      else if(state > gotoTable[index][middle][0])
-      {
-        low = middle + 1;
-      }
-      else
-      {
-        value = gotoTable[index][middle][1];
-        break;
-      }
-    }
-
-    return value;
-  }
-
-  private int state()
-  {
-    State s = (State) stack.previous();
-    stack.next();
-    return s.state;
-  }
-
-  private ArrayList pop()
-  {
-    return (ArrayList) ((State) stack.previous()).nodes;
-  }
-
-  private int index(Switchable token)
-  {
-    converter.index = -1;
-    token.apply(converter);
-    return converter.index;
-  }
-
-  public Start parse() throws ParserException, LexerException, IOException
-  {
-    push(0, null);
-    List ign = null;
-    while(true)
-    {
-      while(index(lexer.peek()) == -1)
-      {
-        if(ign == null)
-        {
-          ign = new TypedLinkedList(NodeCast.instance);
-        }
-
-        ign.add(lexer.next());
-      }
-
-      if(ign != null)
-      {
-        ignoredTokens.setIn(lexer.peek(), ign);
-        ign = null;
-      }
-
-      last_pos = lexer.peek().getPos();
-      last_line = lexer.peek().getLine();
-      last_token = lexer.peek();
-
-      int index = index(lexer.peek());
-      action[0] = actionTable[state()][0][1];
-      action[1] = actionTable[state()][0][2];
-
-      int low = 1;
-      int high = actionTable[state()].length - 1;
-
-      while(low <= high)
-      {
-        int middle = (low + high) / 2;
-
-        if(index < actionTable[state()][middle][0])
-        {
-          high = middle - 1;
-        }
-        else if(index > actionTable[state()][middle][0])
-        {
-          low = middle + 1;
-        }
-        else
-        {
-          action[0] = actionTable[state()][middle][1];
-          action[1] = actionTable[state()][middle][2];
-          break;
-        }
-      }
-
-      switch(action[0])
-      {
-      case SHIFT:
-        {
-          ArrayList list = new ArrayList();
-          list.add(lexer.next());
-          push(action[1], list);
-          last_shift = action[1];
-        }
-        break;
-      case REDUCE:
-        switch(action[1])
-        {
-        case 0: /* reduce AAgrammar1Grammar */
-          {
-            ArrayList list = new0();
-            push(goTo(0), list);
-          }
-          break;
-        case 1: /* reduce AAgrammar2Grammar */
-          {
-            ArrayList list = new1();
-            push(goTo(0), list);
-          }
-          break;
-        case 2: /* reduce AAgrammar3Grammar */
-          {
-            ArrayList list = new2();
-            push(goTo(0), list);
-          }
-          break;
-        case 3: /* reduce AAgrammar4Grammar */
-          {
-            ArrayList list = new3();
-            push(goTo(0), list);
-          }
-          break;
-        case 4: /* reduce AAgrammar5Grammar */
-          {
-            ArrayList list = new4();
-            push(goTo(0), list);
-          }
-          break;
-        case 5: /* reduce AAgrammar6Grammar */
-          {
-            ArrayList list = new5();
-            push(goTo(0), list);
-          }
-          break;
-        case 6: /* reduce AAgrammar7Grammar */
-          {
-            ArrayList list = new6();
-            push(goTo(0), list);
-          }
-          break;
-        case 7: /* reduce AAgrammar8Grammar */
-          {
-            ArrayList list = new7();
-            push(goTo(0), list);
-          }
-          break;
-        case 8: /* reduce AAgrammar9Grammar */
-          {
-            ArrayList list = new8();
-            push(goTo(0), list);
-          }
-          break;
-        case 9: /* reduce AAgrammar10Grammar */
-          {
-            ArrayList list = new9();
-            push(goTo(0), list);
-          }
-          break;
-        case 10: /* reduce AAgrammar11Grammar */
-          {
-            ArrayList list = new10();
-            push(goTo(0), list);
-          }
-          break;
-        case 11: /* reduce AAgrammar12Grammar */
-          {
-            ArrayList list = new11();
-            push(goTo(0), list);
-          }
-          break;
-        case 12: /* reduce AAgrammar13Grammar */
-          {
-            ArrayList list = new12();
-            push(goTo(0), list);
-          }
-          break;
-        case 13: /* reduce AAgrammar14Grammar */
-          {
-            ArrayList list = new13();
-            push(goTo(0), list);
-          }
-          break;
-        case 14: /* reduce AAgrammar15Grammar */
-          {
-            ArrayList list = new14();
-            push(goTo(0), list);
-          }
-          break;
-        case 15: /* reduce AAgrammar16Grammar */
-          {
-            ArrayList list = new15();
-            push(goTo(0), list);
-          }
-          break;
-        case 16: /* reduce AAgrammar17Grammar */
-          {
-            ArrayList list = new16();
-            push(goTo(0), list);
-          }
-          break;
-        case 17: /* reduce AAgrammar18Grammar */
-          {
-            ArrayList list = new17();
-            push(goTo(0), list);
-          }
-          break;
-        case 18: /* reduce AAgrammar19Grammar */
-          {
-            ArrayList list = new18();
-            push(goTo(0), list);
-          }
-          break;
-        case 19: /* reduce AAgrammar20Grammar */
-          {
-            ArrayList list = new19();
-            push(goTo(0), list);
-          }
-          break;
-        case 20: /* reduce AAgrammar21Grammar */
-          {
-            ArrayList list = new20();
-            push(goTo(0), list);
-          }
-          break;
-        case 21: /* reduce AAgrammar22Grammar */
-          {
-            ArrayList list = new21();
-            push(goTo(0), list);
-          }
-          break;
-        case 22: /* reduce AAgrammar23Grammar */
-          {
-            ArrayList list = new22();
-            push(goTo(0), list);
-          }
-          break;
-        case 23: /* reduce AAgrammar24Grammar */
-          {
-            ArrayList list = new23();
-            push(goTo(0), list);
-          }
-          break;
-        case 24: /* reduce AAgrammar25Grammar */
-          {
-            ArrayList list = new24();
-            push(goTo(0), list);
-          }
-          break;
-        case 25: /* reduce AAgrammar26Grammar */
-          {
-            ArrayList list = new25();
-            push(goTo(0), list);
-          }
-          break;
-        case 26: /* reduce AAgrammar27Grammar */
-          {
-            ArrayList list = new26();
-            push(goTo(0), list);
-          }
-          break;
-        case 27: /* reduce AAgrammar28Grammar */
-          {
-            ArrayList list = new27();
-            push(goTo(0), list);
-          }
-          break;
-        case 28: /* reduce AAgrammar29Grammar */
-          {
-            ArrayList list = new28();
-            push(goTo(0), list);
-          }
-          break;
-        case 29: /* reduce AAgrammar30Grammar */
-          {
-            ArrayList list = new29();
-            push(goTo(0), list);
-          }
-          break;
-        case 30: /* reduce AAgrammar31Grammar */
-          {
-            ArrayList list = new30();
-            push(goTo(0), list);
-          }
-          break;
-        case 31: /* reduce AAgrammar32Grammar */
-          {
-            ArrayList list = new31();
-            push(goTo(0), list);
-          }
-          break;
-        case 32: /* reduce AAgrammar33Grammar */
-          {
-            ArrayList list = new32();
-            push(goTo(0), list);
-          }
-          break;
-        case 33: /* reduce AAgrammar34Grammar */
-          {
-            ArrayList list = new33();
-            push(goTo(0), list);
-          }
-          break;
-        case 34: /* reduce AAgrammar35Grammar */
-          {
-            ArrayList list = new34();
-            push(goTo(0), list);
-          }
-          break;
-        case 35: /* reduce AAgrammar36Grammar */
-          {
-            ArrayList list = new35();
-            push(goTo(0), list);
-          }
-          break;
-        case 36: /* reduce AAgrammar37Grammar */
-          {
-            ArrayList list = new36();
-            push(goTo(0), list);
-          }
-          break;
-        case 37: /* reduce AAgrammar38Grammar */
-          {
-            ArrayList list = new37();
-            push(goTo(0), list);
-          }
-          break;
-        case 38: /* reduce AAgrammar39Grammar */
-          {
-            ArrayList list = new38();
-            push(goTo(0), list);
-          }
-          break;
-        case 39: /* reduce AAgrammar40Grammar */
-          {
-            ArrayList list = new39();
-            push(goTo(0), list);
-          }
-          break;
-        case 40: /* reduce AAgrammar41Grammar */
-          {
-            ArrayList list = new40();
-            push(goTo(0), list);
-          }
-          break;
-        case 41: /* reduce AAgrammar42Grammar */
-          {
-            ArrayList list = new41();
-            push(goTo(0), list);
-          }
-          break;
-        case 42: /* reduce AAgrammar43Grammar */
-          {
-            ArrayList list = new42();
-            push(goTo(0), list);
-          }
-          break;
-        case 43: /* reduce AAgrammar44Grammar */
-          {
-            ArrayList list = new43();
-            push(goTo(0), list);
-          }
-          break;
-        case 44: /* reduce AAgrammar45Grammar */
-          {
-            ArrayList list = new44();
-            push(goTo(0), list);
-          }
-          break;
-        case 45: /* reduce AAgrammar46Grammar */
-          {
-            ArrayList list = new45();
-            push(goTo(0), list);
-          }
-          break;
-        case 46: /* reduce AAgrammar47Grammar */
-          {
-            ArrayList list = new46();
-            push(goTo(0), list);
-          }
-          break;
-        case 47: /* reduce AAgrammar48Grammar */
-          {
-            ArrayList list = new47();
-            push(goTo(0), list);
-          }
-          break;
-        case 48: /* reduce AAgrammar49Grammar */
-          {
-            ArrayList list = new48();
-            push(goTo(0), list);
-          }
-          break;
-        case 49: /* reduce AAgrammar50Grammar */
-          {
-            ArrayList list = new49();
-            push(goTo(0), list);
-          }
-          break;
-        case 50: /* reduce AAgrammar51Grammar */
-          {
-            ArrayList list = new50();
-            push(goTo(0), list);
-          }
-          break;
-        case 51: /* reduce AAgrammar52Grammar */
-          {
-            ArrayList list = new51();
-            push(goTo(0), list);
-          }
-          break;
-        case 52: /* reduce AAgrammar53Grammar */
-          {
-            ArrayList list = new52();
-            push(goTo(0), list);
-          }
-          break;
-        case 53: /* reduce AAgrammar54Grammar */
-          {
-            ArrayList list = new53();
-            push(goTo(0), list);
-          }
-          break;
-        case 54: /* reduce AAgrammar55Grammar */
-          {
-            ArrayList list = new54();
-            push(goTo(0), list);
-          }
-          break;
-        case 55: /* reduce AAgrammar56Grammar */
-          {
-            ArrayList list = new55();
-            push(goTo(0), list);
-          }
-          break;
-        case 56: /* reduce AAgrammar57Grammar */
-          {
-            ArrayList list = new56();
-            push(goTo(0), list);
-          }
-          break;
-        case 57: /* reduce AAgrammar58Grammar */
-          {
-            ArrayList list = new57();
-            push(goTo(0), list);
-          }
-          break;
-        case 58: /* reduce AAgrammar59Grammar */
-          {
-            ArrayList list = new58();
-            push(goTo(0), list);
-          }
-          break;
-        case 59: /* reduce AAgrammar60Grammar */
-          {
-            ArrayList list = new59();
-            push(goTo(0), list);
-          }
-          break;
-        case 60: /* reduce AAgrammar61Grammar */
-          {
-            ArrayList list = new60();
-            push(goTo(0), list);
-          }
-          break;
-        case 61: /* reduce AAgrammar62Grammar */
-          {
-            ArrayList list = new61();
-            push(goTo(0), list);
-          }
-          break;
-        case 62: /* reduce AAgrammar63Grammar */
-          {
-            ArrayList list = new62();
-            push(goTo(0), list);
-          }
-          break;
-        case 63: /* reduce AAgrammar64Grammar */
-          {
-            ArrayList list = new63();
-            push(goTo(0), list);
-          }
-          break;
-        case 64: /* reduce AAgrammar65Grammar */
-          {
-            ArrayList list = new64();
-            push(goTo(0), list);
-          }
-          break;
-        case 65: /* reduce AAgrammar66Grammar */
-          {
-            ArrayList list = new65();
-            push(goTo(0), list);
-          }
-          break;
-        case 66: /* reduce AAgrammar67Grammar */
-          {
-            ArrayList list = new66();
-            push(goTo(0), list);
-          }
-          break;
-        case 67: /* reduce AAgrammar68Grammar */
-          {
-            ArrayList list = new67();
-            push(goTo(0), list);
-          }
-          break;
-        case 68: /* reduce AAgrammar69Grammar */
-          {
-            ArrayList list = new68();
-            push(goTo(0), list);
-          }
-          break;
-        case 69: /* reduce AAgrammar70Grammar */
-          {
-            ArrayList list = new69();
-            push(goTo(0), list);
-          }
-          break;
-        case 70: /* reduce AAgrammar71Grammar */
-          {
-            ArrayList list = new70();
-            push(goTo(0), list);
-          }
-          break;
-        case 71: /* reduce AAgrammar72Grammar */
-          {
-            ArrayList list = new71();
-            push(goTo(0), list);
-          }
-          break;
-        case 72: /* reduce AAgrammar73Grammar */
-          {
-            ArrayList list = new72();
-            push(goTo(0), list);
-          }
-          break;
-        case 73: /* reduce AAgrammar74Grammar */
-          {
-            ArrayList list = new73();
-            push(goTo(0), list);
-          }
-          break;
-        case 74: /* reduce AAgrammar75Grammar */
-          {
-            ArrayList list = new74();
-            push(goTo(0), list);
-          }
-          break;
-        case 75: /* reduce AAgrammar76Grammar */
-          {
-            ArrayList list = new75();
-            push(goTo(0), list);
-          }
-          break;
-        case 76: /* reduce AAgrammar77Grammar */
-          {
-            ArrayList list = new76();
-            push(goTo(0), list);
-          }
-          break;
-        case 77: /* reduce AAgrammar78Grammar */
-          {
-            ArrayList list = new77();
-            push(goTo(0), list);
-          }
-          break;
-        case 78: /* reduce AAgrammar79Grammar */
-          {
-            ArrayList list = new78();
-            push(goTo(0), list);
-          }
-          break;
-        case 79: /* reduce AAgrammar80Grammar */
-          {
-            ArrayList list = new79();
-            push(goTo(0), list);
-          }
-          break;
-        case 80: /* reduce AAgrammar81Grammar */
-          {
-            ArrayList list = new80();
-            push(goTo(0), list);
-          }
-          break;
-        case 81: /* reduce AAgrammar82Grammar */
-          {
-            ArrayList list = new81();
-            push(goTo(0), list);
-          }
-          break;
-        case 82: /* reduce AAgrammar83Grammar */
-          {
-            ArrayList list = new82();
-            push(goTo(0), list);
-          }
-          break;
-        case 83: /* reduce AAgrammar84Grammar */
-          {
-            ArrayList list = new83();
-            push(goTo(0), list);
-          }
-          break;
-        case 84: /* reduce AAgrammar85Grammar */
-          {
-            ArrayList list = new84();
-            push(goTo(0), list);
-          }
-          break;
-        case 85: /* reduce AAgrammar86Grammar */
-          {
-            ArrayList list = new85();
-            push(goTo(0), list);
-          }
-          break;
-        case 86: /* reduce AAgrammar87Grammar */
-          {
-            ArrayList list = new86();
-            push(goTo(0), list);
-          }
-          break;
-        case 87: /* reduce AAgrammar88Grammar */
-          {
-            ArrayList list = new87();
-            push(goTo(0), list);
-          }
-          break;
-        case 88: /* reduce AAgrammar89Grammar */
-          {
-            ArrayList list = new88();
-            push(goTo(0), list);
-          }
-          break;
-        case 89: /* reduce AAgrammar90Grammar */
-          {
-            ArrayList list = new89();
-            push(goTo(0), list);
-          }
-          break;
-        case 90: /* reduce AAgrammar91Grammar */
-          {
-            ArrayList list = new90();
-            push(goTo(0), list);
-          }
-          break;
-        case 91: /* reduce AAgrammar92Grammar */
-          {
-            ArrayList list = new91();
-            push(goTo(0), list);
-          }
-          break;
-        case 92: /* reduce AAgrammar93Grammar */
-          {
-            ArrayList list = new92();
-            push(goTo(0), list);
-          }
-          break;
-        case 93: /* reduce AAgrammar94Grammar */
-          {
-            ArrayList list = new93();
-            push(goTo(0), list);
-          }
-          break;
-        case 94: /* reduce AAgrammar95Grammar */
-          {
-            ArrayList list = new94();
-            push(goTo(0), list);
-          }
-          break;
-        case 95: /* reduce AAgrammar96Grammar */
-          {
-            ArrayList list = new95();
-            push(goTo(0), list);
-          }
-          break;
-        case 96: /* reduce AAgrammar97Grammar */
-          {
-            ArrayList list = new96();
-            push(goTo(0), list);
-          }
-          break;
-        case 97: /* reduce AAgrammar98Grammar */
-          {
-            ArrayList list = new97();
-            push(goTo(0), list);
-          }
-          break;
-        case 98: /* reduce AAgrammar99Grammar */
-          {
-            ArrayList list = new98();
-            push(goTo(0), list);
-          }
-          break;
-        case 99: /* reduce AAgrammar100Grammar */
-          {
-            ArrayList list = new99();
-            push(goTo(0), list);
-          }
-          break;
-        case 100: /* reduce AAgrammar101Grammar */
-          {
-            ArrayList list = new100();
-            push(goTo(0), list);
-          }
-          break;
-        case 101: /* reduce AAgrammar102Grammar */
-          {
-            ArrayList list = new101();
-            push(goTo(0), list);
-          }
-          break;
-        case 102: /* reduce AAgrammar103Grammar */
-          {
-            ArrayList list = new102();
-            push(goTo(0), list);
-          }
-          break;
-        case 103: /* reduce AAgrammar104Grammar */
-          {
-            ArrayList list = new103();
-            push(goTo(0), list);
-          }
-          break;
-        case 104: /* reduce AAgrammar105Grammar */
-          {
-            ArrayList list = new104();
-            push(goTo(0), list);
-          }
-          break;
-        case 105: /* reduce AAgrammar106Grammar */
-          {
-            ArrayList list = new105();
-            push(goTo(0), list);
-          }
-          break;
-        case 106: /* reduce AAgrammar107Grammar */
-          {
-            ArrayList list = new106();
-            push(goTo(0), list);
-          }
-          break;
-        case 107: /* reduce AAgrammar108Grammar */
-          {
-            ArrayList list = new107();
-            push(goTo(0), list);
-          }
-          break;
-        case 108: /* reduce AAgrammar109Grammar */
-          {
-            ArrayList list = new108();
-            push(goTo(0), list);
-          }
-          break;
-        case 109: /* reduce AAgrammar110Grammar */
-          {
-            ArrayList list = new109();
-            push(goTo(0), list);
-          }
-          break;
-        case 110: /* reduce AAgrammar111Grammar */
-          {
-            ArrayList list = new110();
-            push(goTo(0), list);
-          }
-          break;
-        case 111: /* reduce AAgrammar112Grammar */
-          {
-            ArrayList list = new111();
-            push(goTo(0), list);
-          }
-          break;
-        case 112: /* reduce AAgrammar113Grammar */
-          {
-            ArrayList list = new112();
-            push(goTo(0), list);
-          }
-          break;
-        case 113: /* reduce AAgrammar114Grammar */
-          {
-            ArrayList list = new113();
-            push(goTo(0), list);
-          }
-          break;
-        case 114: /* reduce AAgrammar115Grammar */
-          {
-            ArrayList list = new114();
-            push(goTo(0), list);
-          }
-          break;
-        case 115: /* reduce AAgrammar116Grammar */
-          {
-            ArrayList list = new115();
-            push(goTo(0), list);
-          }
-          break;
-        case 116: /* reduce AAgrammar117Grammar */
-          {
-            ArrayList list = new116();
-            push(goTo(0), list);
-          }
-          break;
-        case 117: /* reduce AAgrammar118Grammar */
-          {
-            ArrayList list = new117();
-            push(goTo(0), list);
-          }
-          break;
-        case 118: /* reduce AAgrammar119Grammar */
-          {
-            ArrayList list = new118();
-            push(goTo(0), list);
-          }
-          break;
-        case 119: /* reduce AAgrammar120Grammar */
-          {
-            ArrayList list = new119();
-            push(goTo(0), list);
-          }
-          break;
-        case 120: /* reduce AAgrammar121Grammar */
-          {
-            ArrayList list = new120();
-            push(goTo(0), list);
-          }
-          break;
-        case 121: /* reduce AAgrammar122Grammar */
-          {
-            ArrayList list = new121();
-            push(goTo(0), list);
-          }
-          break;
-        case 122: /* reduce AAgrammar123Grammar */
-          {
-            ArrayList list = new122();
-            push(goTo(0), list);
-          }
-          break;
-        case 123: /* reduce AAgrammar124Grammar */
-          {
-            ArrayList list = new123();
-            push(goTo(0), list);
-          }
-          break;
-        case 124: /* reduce AAgrammar125Grammar */
-          {
-            ArrayList list = new124();
-            push(goTo(0), list);
-          }
-          break;
-        case 125: /* reduce AAgrammar126Grammar */
-          {
-            ArrayList list = new125();
-            push(goTo(0), list);
-          }
-          break;
-        case 126: /* reduce AAgrammar127Grammar */
-          {
-            ArrayList list = new126();
-            push(goTo(0), list);
-          }
-          break;
-        case 127: /* reduce AAgrammar128Grammar */
-          {
-            ArrayList list = new127();
-            push(goTo(0), list);
-          }
-          break;
-        case 128: /* reduce APackage */
-          {
-            ArrayList list = new128();
-            push(goTo(1), list);
-          }
-          break;
-        case 129: /* reduce AApkgname1PkgName */
-          {
-            ArrayList list = new129();
-            push(goTo(2), list);
-          }
-          break;
-        case 130: /* reduce AApkgname2PkgName */
-          {
-            ArrayList list = new130();
-            push(goTo(2), list);
-          }
-          break;
-        case 131: /* reduce APkgNameTail */
-          {
-            ArrayList list = new131();
-            push(goTo(3), list);
-          }
-          break;
-        case 132: /* reduce AHelpers */
-          {
-            ArrayList list = new132();
-            push(goTo(4), list);
-          }
-          break;
-        case 133: /* reduce AHelperDef */
-          {
-            ArrayList list = new133();
-            push(goTo(5), list);
-          }
-          break;
-        case 134: /* reduce AStates */
-          {
-            ArrayList list = new134();
-            push(goTo(6), list);
-          }
-          break;
-        case 135: /* reduce AAidlist1IdList */
-          {
-            ArrayList list = new135();
-            push(goTo(7), list);
-          }
-          break;
-        case 136: /* reduce AAidlist2IdList */
-          {
-            ArrayList list = new136();
-            push(goTo(7), list);
-          }
-          break;
-        case 137: /* reduce AIdListTail */
-          {
-            ArrayList list = new137();
-            push(goTo(8), list);
-          }
-          break;
-        case 138: /* reduce ATokens */
-          {
-            ArrayList list = new138();
-            push(goTo(9), list);
-          }
-          break;
-        case 139: /* reduce AAtokendef1TokenDef */
-          {
-            ArrayList list = new139();
-            push(goTo(10), list);
-          }
-          break;
-        case 140: /* reduce AAtokendef2TokenDef */
-          {
-            ArrayList list = new140();
-            push(goTo(10), list);
-          }
-          break;
-        case 141: /* reduce AAtokendef3TokenDef */
-          {
-            ArrayList list = new141();
-            push(goTo(10), list);
-          }
-          break;
-        case 142: /* reduce AAtokendef4TokenDef */
-          {
-            ArrayList list = new142();
-            push(goTo(10), list);
-          }
-          break;
-        case 143: /* reduce AAstatelist1StateList */
-          {
-            ArrayList list = new143();
-            push(goTo(11), list);
-          }
-          break;
-        case 144: /* reduce AAstatelist2StateList */
-          {
-            ArrayList list = new144();
-            push(goTo(11), list);
-          }
-          break;
-        case 145: /* reduce AAstatelist3StateList */
-          {
-            ArrayList list = new145();
-            push(goTo(11), list);
-          }
-          break;
-        case 146: /* reduce AAstatelist4StateList */
-          {
-            ArrayList list = new146();
-            push(goTo(11), list);
-          }
-          break;
-        case 147: /* reduce AAstatelisttail1StateListTail */
-          {
-            ArrayList list = new147();
-            push(goTo(12), list);
-          }
-          break;
-        case 148: /* reduce AAstatelisttail2StateListTail */
-          {
-            ArrayList list = new148();
-            push(goTo(12), list);
-          }
-          break;
-        case 149: /* reduce ATransition */
-          {
-            ArrayList list = new149();
-            push(goTo(13), list);
-          }
-          break;
-        case 150: /* reduce AAigntokens1IgnTokens */
-          {
-            ArrayList list = new150();
-            push(goTo(14), list);
-          }
-          break;
-        case 151: /* reduce AAigntokens2IgnTokens */
-          {
-            ArrayList list = new151();
-            push(goTo(14), list);
-          }
-          break;
-        case 152: /* reduce ALookAhead */
-          {
-            ArrayList list = new152();
-            push(goTo(15), list);
-          }
-          break;
-        case 153: /* reduce AAregexp1RegExp */
-          {
-            ArrayList list = new153();
-            push(goTo(16), list);
-          }
-          break;
-        case 154: /* reduce AAregexp2RegExp */
-          {
-            ArrayList list = new154();
-            push(goTo(16), list);
-          }
-          break;
-        case 155: /* reduce ARegExpTail */
-          {
-            ArrayList list = new155();
-            push(goTo(17), list);
-          }
-          break;
-        case 156: /* reduce AAconcat1Concat */
-          {
-            ArrayList list = new156();
-            push(goTo(18), list);
-          }
-          break;
-        case 157: /* reduce AAconcat2Concat */
-          {
-            ArrayList list = new157();
-            push(goTo(18), list);
-          }
-          break;
-        case 158: /* reduce AAunexp1UnExp */
-          {
-            ArrayList list = new158();
-            push(goTo(19), list);
-          }
-          break;
-        case 159: /* reduce AAunexp2UnExp */
-          {
-            ArrayList list = new159();
-            push(goTo(19), list);
-          }
-          break;
-        case 160: /* reduce ACharBasic */
-          {
-            ArrayList list = new160();
-            push(goTo(20), list);
-          }
-          break;
-        case 161: /* reduce ASetBasic */
-          {
-            ArrayList list = new161();
-            push(goTo(20), list);
-          }
-          break;
-        case 162: /* reduce AStringBasic */
-          {
-            ArrayList list = new162();
-            push(goTo(20), list);
-          }
-          break;
-        case 163: /* reduce AIdBasic */
-          {
-            ArrayList list = new163();
-            push(goTo(20), list);
-          }
-          break;
-        case 164: /* reduce ARegExpBasic */
-          {
-            ArrayList list = new164();
-            push(goTo(20), list);
-          }
-          break;
-        case 165: /* reduce ACharChar */
-          {
-            ArrayList list = new165();
-            push(goTo(21), list);
-          }
-          break;
-        case 166: /* reduce ADecChar */
-          {
-            ArrayList list = new166();
-            push(goTo(21), list);
-          }
-          break;
-        case 167: /* reduce AHexChar */
-          {
-            ArrayList list = new167();
-            push(goTo(21), list);
-          }
-          break;
-        case 168: /* reduce AOperationSet */
-          {
-            ArrayList list = new168();
-            push(goTo(22), list);
-          }
-          break;
-        case 169: /* reduce AIntervalSet */
-          {
-            ArrayList list = new169();
-            push(goTo(22), list);
-          }
-          break;
-        case 170: /* reduce AStarUnOp */
-          {
-            ArrayList list = new170();
-            push(goTo(23), list);
-          }
-          break;
-        case 171: /* reduce AQMarkUnOp */
-          {
-            ArrayList list = new171();
-            push(goTo(23), list);
-          }
-          break;
-        case 172: /* reduce APlusUnOp */
-          {
-            ArrayList list = new172();
-            push(goTo(23), list);
-          }
-          break;
-        case 173: /* reduce APlusBinOp */
-          {
-            ArrayList list = new173();
-            push(goTo(24), list);
-          }
-          break;
-        case 174: /* reduce AMinusBinOp */
-          {
-            ArrayList list = new174();
-            push(goTo(24), list);
-          }
-          break;
-        case 175: /* reduce AProductions */
-          {
-            ArrayList list = new175();
-            push(goTo(25), list);
-          }
-          break;
-        case 176: /* reduce AAprod1Prod */
-          {
-            ArrayList list = new176();
-            push(goTo(26), list);
-          }
-          break;
-        case 177: /* reduce AAprod2Prod */
-          {
-            ArrayList list = new177();
-            push(goTo(26), list);
-          }
-          break;
-        case 178: /* reduce AAprodtransform1ProdTransform */
-          {
-            ArrayList list = new178();
-            push(goTo(27), list);
-          }
-          break;
-        case 179: /* reduce AAprodtransform2ProdTransform */
-          {
-            ArrayList list = new179();
-            push(goTo(27), list);
-          }
-          break;
-        case 180: /* reduce AAalts1Alts */
-          {
-            ArrayList list = new180();
-            push(goTo(28), list);
-          }
-          break;
-        case 181: /* reduce AAalts2Alts */
-          {
-            ArrayList list = new181();
-            push(goTo(28), list);
-          }
-          break;
-        case 182: /* reduce AAltsTail */
-          {
-            ArrayList list = new182();
-            push(goTo(29), list);
-          }
-          break;
-        case 183: /* reduce AAalt1Alt */
-          {
-            ArrayList list = new183();
-            push(goTo(30), list);
-          }
-          break;
-        case 184: /* reduce AAalt2Alt */
-          {
-            ArrayList list = new184();
-            push(goTo(30), list);
-          }
-          break;
-        case 185: /* reduce AAalt3Alt */
-          {
-            ArrayList list = new185();
-            push(goTo(30), list);
-          }
-          break;
-        case 186: /* reduce AAalt4Alt */
-          {
-            ArrayList list = new186();
-            push(goTo(30), list);
-          }
-          break;
-        case 187: /* reduce AAalt5Alt */
-          {
-            ArrayList list = new187();
-            push(goTo(30), list);
-          }
-          break;
-        case 188: /* reduce AAalt6Alt */
-          {
-            ArrayList list = new188();
-            push(goTo(30), list);
-          }
-          break;
-        case 189: /* reduce AAalt7Alt */
-          {
-            ArrayList list = new189();
-            push(goTo(30), list);
-          }
-          break;
-        case 190: /* reduce AAalt8Alt */
-          {
-            ArrayList list = new190();
-            push(goTo(30), list);
-          }
-          break;
-        case 191: /* reduce AAalttransform1AltTransform */
-          {
-            ArrayList list = new191();
-            push(goTo(31), list);
-          }
-          break;
-        case 192: /* reduce AAalttransform2AltTransform */
-          {
-            ArrayList list = new192();
-            push(goTo(31), list);
-          }
-          break;
-        case 193: /* reduce AAnewterm1Term */
-          {
-            ArrayList list = new193();
-            push(goTo(32), list);
-          }
-          break;
-        case 194: /* reduce AAnewterm2Term */
-          {
-            ArrayList list = new194();
-            push(goTo(32), list);
-          }
-          break;
-        case 195: /* reduce AAlistterm1Term */
-          {
-            ArrayList list = new195();
-            push(goTo(32), list);
-          }
-          break;
-        case 196: /* reduce AAlistterm2Term */
-          {
-            ArrayList list = new196();
-            push(goTo(32), list);
-          }
-          break;
-        case 197: /* reduce AAsimpleterm1Term */
-          {
-            ArrayList list = new197();
-            push(goTo(32), list);
-          }
-          break;
-        case 198: /* reduce AAsimpleterm2Term */
-          {
-            ArrayList list = new198();
-            push(goTo(32), list);
-          }
-          break;
-        case 199: /* reduce AAsimpleterm3Term */
-          {
-            ArrayList list = new199();
-            push(goTo(32), list);
-          }
-          break;
-        case 200: /* reduce AAsimpleterm4Term */
-          {
-            ArrayList list = new200();
-            push(goTo(32), list);
-          }
-          break;
-        case 201: /* reduce ANullTerm */
-          {
-            ArrayList list = new201();
-            push(goTo(32), list);
-          }
-          break;
-        case 202: /* reduce AAlistoflistterm1ListOfListTerm */
-          {
-            ArrayList list = new202();
-            push(goTo(33), list);
-          }
-          break;
-        case 203: /* reduce AAlistoflistterm2ListOfListTerm */
-          {
-            ArrayList list = new203();
-            push(goTo(33), list);
-          }
-          break;
-        case 204: /* reduce AAnewlistterm1ListTerm */
-          {
-            ArrayList list = new204();
-            push(goTo(34), list);
-          }
-          break;
-        case 205: /* reduce AAnewlistterm2ListTerm */
-          {
-            ArrayList list = new205();
-            push(goTo(34), list);
-          }
-          break;
-        case 206: /* reduce AAsimplelistterm1ListTerm */
-          {
-            ArrayList list = new206();
-            push(goTo(34), list);
-          }
-          break;
-        case 207: /* reduce AAsimplelistterm2ListTerm */
-          {
-            ArrayList list = new207();
-            push(goTo(34), list);
-          }
-          break;
-        case 208: /* reduce AAsimplelistterm3ListTerm */
-          {
-            ArrayList list = new208();
-            push(goTo(34), list);
-          }
-          break;
-        case 209: /* reduce AAsimplelistterm4ListTerm */
-          {
-            ArrayList list = new209();
-            push(goTo(34), list);
-          }
-          break;
-        case 210: /* reduce AListTermTail */
-          {
-            ArrayList list = new210();
-            push(goTo(35), list);
-          }
-          break;
-        case 211: /* reduce ASimpleTermTail */
-          {
-            ArrayList list = new211();
-            push(goTo(36), list);
-          }
-          break;
-        case 212: /* reduce AAprodname1ProdName */
-          {
-            ArrayList list = new212();
-            push(goTo(37), list);
-          }
-          break;
-        case 213: /* reduce AAprodname2ProdName */
-          {
-            ArrayList list = new213();
-            push(goTo(37), list);
-          }
-          break;
-        case 214: /* reduce AProdNameTail */
-          {
-            ArrayList list = new214();
-            push(goTo(38), list);
-          }
-          break;
-        case 215: /* reduce AAparams1Params */
-          {
-            ArrayList list = new215();
-            push(goTo(39), list);
-          }
-          break;
-        case 216: /* reduce AAparams2Params */
-          {
-            ArrayList list = new216();
-            push(goTo(39), list);
-          }
-          break;
-        case 217: /* reduce AParamsTail */
-          {
-            ArrayList list = new217();
-            push(goTo(40), list);
-          }
-          break;
-        case 218: /* reduce AAltName */
-          {
-            ArrayList list = new218();
-            push(goTo(41), list);
-          }
-          break;
-        case 219: /* reduce AAelem1Elem */
-          {
-            ArrayList list = new219();
-            push(goTo(42), list);
-          }
-          break;
-        case 220: /* reduce AAelem2Elem */
-          {
-            ArrayList list = new220();
-            push(goTo(42), list);
-          }
-          break;
-        case 221: /* reduce AAelem3Elem */
-          {
-            ArrayList list = new221();
-            push(goTo(42), list);
-          }
-          break;
-        case 222: /* reduce AAelem4Elem */
-          {
-            ArrayList list = new222();
-            push(goTo(42), list);
-          }
-          break;
-        case 223: /* reduce AAelem5Elem */
-          {
-            ArrayList list = new223();
-            push(goTo(42), list);
-          }
-          break;
-        case 224: /* reduce AAelem6Elem */
-          {
-            ArrayList list = new224();
-            push(goTo(42), list);
-          }
-          break;
-        case 225: /* reduce AAelem7Elem */
-          {
-            ArrayList list = new225();
-            push(goTo(42), list);
-          }
-          break;
-        case 226: /* reduce AAelem8Elem */
-          {
-            ArrayList list = new226();
-            push(goTo(42), list);
-          }
-          break;
-        case 227: /* reduce AElemName */
-          {
-            ArrayList list = new227();
-            push(goTo(43), list);
-          }
-          break;
-        case 228: /* reduce ATokenSpecifier */
-          {
-            ArrayList list = new228();
-            push(goTo(44), list);
-          }
-          break;
-        case 229: /* reduce AProductionSpecifier */
-          {
-            ArrayList list = new229();
-            push(goTo(44), list);
-          }
-          break;
-        case 230: /* reduce AAst */
-          {
-            ArrayList list = new230();
-            push(goTo(45), list);
-          }
-          break;
-        case 231: /* reduce AAstProd */
-          {
-            ArrayList list = new231();
-            push(goTo(46), list);
-          }
-          break;
-        case 232: /* reduce AAastalts1AstAlts */
-          {
-            ArrayList list = new232();
-            push(goTo(47), list);
-          }
-          break;
-        case 233: /* reduce AAastalts2AstAlts */
-          {
-            ArrayList list = new233();
-            push(goTo(47), list);
-          }
-          break;
-        case 234: /* reduce AAstAltsTail */
-          {
-            ArrayList list = new234();
-            push(goTo(48), list);
-          }
-          break;
-        case 235: /* reduce AAastalt1AstAlt */
-          {
-            ArrayList list = new235();
-            push(goTo(49), list);
-          }
-          break;
-        case 236: /* reduce AAastalt2AstAlt */
-          {
-            ArrayList list = new236();
-            push(goTo(49), list);
-          }
-          break;
-        case 237: /* reduce AAastalt3AstAlt */
-          {
-            ArrayList list = new237();
-            push(goTo(49), list);
-          }
-          break;
-        case 238: /* reduce AAastalt4AstAlt */
-          {
-            ArrayList list = new238();
-            push(goTo(49), list);
-          }
-          break;
-        case 239: /* reduce ATerminal$PkgNameTail */
-          {
-            ArrayList list = new239();
-            push(goTo(50), list);
-          }
-          break;
-        case 240: /* reduce ANonTerminal$PkgNameTail */
-          {
-            ArrayList list = new240();
-            push(goTo(50), list);
-          }
-          break;
-        case 241: /* reduce ATerminal$HelperDef */
-          {
-            ArrayList list = new241();
-            push(goTo(51), list);
-          }
-          break;
-        case 242: /* reduce ANonTerminal$HelperDef */
-          {
-            ArrayList list = new242();
-            push(goTo(51), list);
-          }
-          break;
-        case 243: /* reduce ATerminal$IdListTail */
-          {
-            ArrayList list = new243();
-            push(goTo(52), list);
-          }
-          break;
-        case 244: /* reduce ANonTerminal$IdListTail */
-          {
-            ArrayList list = new244();
-            push(goTo(52), list);
-          }
-          break;
-        case 245: /* reduce ATerminal$TokenDef */
-          {
-            ArrayList list = new245();
-            push(goTo(53), list);
-          }
-          break;
-        case 246: /* reduce ANonTerminal$TokenDef */
-          {
-            ArrayList list = new246();
-            push(goTo(53), list);
-          }
-          break;
-        case 247: /* reduce ATerminal$StateListTail */
-          {
-            ArrayList list = new247();
-            push(goTo(54), list);
-          }
-          break;
-        case 248: /* reduce ANonTerminal$StateListTail */
-          {
-            ArrayList list = new248();
-            push(goTo(54), list);
-          }
-          break;
-        case 249: /* reduce ATerminal$RegExpTail */
-          {
-            ArrayList list = new249();
-            push(goTo(55), list);
-          }
-          break;
-        case 250: /* reduce ANonTerminal$RegExpTail */
-          {
-            ArrayList list = new250();
-            push(goTo(55), list);
-          }
-          break;
-        case 251: /* reduce ATerminal$UnExp */
-          {
-            ArrayList list = new251();
-            push(goTo(56), list);
-          }
-          break;
-        case 252: /* reduce ANonTerminal$UnExp */
-          {
-            ArrayList list = new252();
-            push(goTo(56), list);
-          }
-          break;
-        case 253: /* reduce ATerminal$Prod */
-          {
-            ArrayList list = new253();
-            push(goTo(57), list);
-          }
-          break;
-        case 254: /* reduce ANonTerminal$Prod */
-          {
-            ArrayList list = new254();
-            push(goTo(57), list);
-          }
-          break;
-        case 255: /* reduce ATerminal$Elem */
-          {
-            ArrayList list = new255();
-            push(goTo(58), list);
-          }
-          break;
-        case 256: /* reduce ANonTerminal$Elem */
-          {
-            ArrayList list = new256();
-            push(goTo(58), list);
-          }
-          break;
-        case 257: /* reduce ATerminal$AltsTail */
-          {
-            ArrayList list = new257();
-            push(goTo(59), list);
-          }
-          break;
-        case 258: /* reduce ANonTerminal$AltsTail */
-          {
-            ArrayList list = new258();
-            push(goTo(59), list);
-          }
-          break;
-        case 259: /* reduce ATerminal$Term */
-          {
-            ArrayList list = new259();
-            push(goTo(60), list);
-          }
-          break;
-        case 260: /* reduce ANonTerminal$Term */
-          {
-            ArrayList list = new260();
-            push(goTo(60), list);
-          }
-          break;
-        case 261: /* reduce ATerminal$ListTermTail */
-          {
-            ArrayList list = new261();
-            push(goTo(61), list);
-          }
-          break;
-        case 262: /* reduce ANonTerminal$ListTermTail */
-          {
-            ArrayList list = new262();
-            push(goTo(61), list);
-          }
-          break;
-        case 263: /* reduce ATerminal$ParamsTail */
-          {
-            ArrayList list = new263();
-            push(goTo(62), list);
-          }
-          break;
-        case 264: /* reduce ANonTerminal$ParamsTail */
-          {
-            ArrayList list = new264();
-            push(goTo(62), list);
-          }
-          break;
-        case 265: /* reduce ATerminal$AstProd */
-          {
-            ArrayList list = new265();
-            push(goTo(63), list);
-          }
-          break;
-        case 266: /* reduce ANonTerminal$AstProd */
-          {
-            ArrayList list = new266();
-            push(goTo(63), list);
-          }
-          break;
-        case 267: /* reduce ATerminal$AstAltsTail */
-          {
-            ArrayList list = new267();
-            push(goTo(64), list);
-          }
-          break;
-        case 268: /* reduce ANonTerminal$AstAltsTail */
-          {
-            ArrayList list = new268();
-            push(goTo(64), list);
-          }
-          break;
-        }
-        break;
-      case ACCEPT:
-        {
-          EOF node2 = (EOF) lexer.next();
-          PGrammar node1 = (PGrammar) ((ArrayList)pop()).get(0);
-          Start node = new Start(node1, node2);
-          return node;
-        }
-      case ERROR:
-        throw new ParserException(last_token,
-                                  "[" + last_line + "," + last_pos + "] " +
-                                  errorMessages[errors[action[1]]]);
-      }
-    }
-  }
-
-  ArrayList new0() /* reduce AAgrammar1Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new1() /* reduce AAgrammar2Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new2() /* reduce AAgrammar3Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new3() /* reduce AAgrammar4Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new4() /* reduce AAgrammar5Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new5() /* reduce AAgrammar6Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new6() /* reduce AAgrammar7Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new7() /* reduce AAgrammar8Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new8() /* reduce AAgrammar9Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new9() /* reduce AAgrammar10Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new10() /* reduce AAgrammar11Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new11() /* reduce AAgrammar12Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new12() /* reduce AAgrammar13Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new13() /* reduce AAgrammar14Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new14() /* reduce AAgrammar15Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new15() /* reduce AAgrammar16Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new16() /* reduce AAgrammar17Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new17() /* reduce AAgrammar18Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new18() /* reduce AAgrammar19Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new19() /* reduce AAgrammar20Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new20() /* reduce AAgrammar21Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new21() /* reduce AAgrammar22Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new22() /* reduce AAgrammar23Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new23() /* reduce AAgrammar24Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new24() /* reduce AAgrammar25Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new25() /* reduce AAgrammar26Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new26() /* reduce AAgrammar27Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new27() /* reduce AAgrammar28Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new28() /* reduce AAgrammar29Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new29() /* reduce AAgrammar30Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new30() /* reduce AAgrammar31Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new31() /* reduce AAgrammar32Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new32() /* reduce AAgrammar33Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new33() /* reduce AAgrammar34Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new34() /* reduce AAgrammar35Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new35() /* reduce AAgrammar36Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new36() /* reduce AAgrammar37Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new37() /* reduce AAgrammar38Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new38() /* reduce AAgrammar39Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new39() /* reduce AAgrammar40Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new40() /* reduce AAgrammar41Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new41() /* reduce AAgrammar42Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new42() /* reduce AAgrammar43Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new43() /* reduce AAgrammar44Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new44() /* reduce AAgrammar45Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new45() /* reduce AAgrammar46Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new46() /* reduce AAgrammar47Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new47() /* reduce AAgrammar48Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new48() /* reduce AAgrammar49Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new49() /* reduce AAgrammar50Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new50() /* reduce AAgrammar51Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new51() /* reduce AAgrammar52Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new52() /* reduce AAgrammar53Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new53() /* reduce AAgrammar54Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new54() /* reduce AAgrammar55Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new55() /* reduce AAgrammar56Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new56() /* reduce AAgrammar57Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new57() /* reduce AAgrammar58Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new58() /* reduce AAgrammar59Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new59() /* reduce AAgrammar60Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new60() /* reduce AAgrammar61Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new61() /* reduce AAgrammar62Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new62() /* reduce AAgrammar63Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      Object nullNode8 = null;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new63() /* reduce AAgrammar64Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      Object nullNode9 = null;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new64() /* reduce AAgrammar65Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      pastNode8 = (PAst)nodeArrayList1.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new65() /* reduce AAgrammar66Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pastNode9 = (PAst)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new66() /* reduce AAgrammar67Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pastNode8 = (PAst)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new67() /* reduce AAgrammar68Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pastNode9 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new68() /* reduce AAgrammar69Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      pastNode8 = (PAst)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new69() /* reduce AAgrammar70Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      pastNode9 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new70() /* reduce AAgrammar71Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new71() /* reduce AAgrammar72Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new72() /* reduce AAgrammar73Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-      pastNode8 = (PAst)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new73() /* reduce AAgrammar74Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-      pastNode9 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new74() /* reduce AAgrammar75Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new75() /* reduce AAgrammar76Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new76() /* reduce AAgrammar77Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new77() /* reduce AAgrammar78Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new78() /* reduce AAgrammar79Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new79() /* reduce AAgrammar80Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new80() /* reduce AAgrammar81Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
-      pastNode8 = (PAst)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new81() /* reduce AAgrammar82Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
-      pastNode9 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new82() /* reduce AAgrammar83Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new83() /* reduce AAgrammar84Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new84() /* reduce AAgrammar85Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new85() /* reduce AAgrammar86Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new86() /* reduce AAgrammar87Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new87() /* reduce AAgrammar88Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new88() /* reduce AAgrammar89Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new89() /* reduce AAgrammar90Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new90() /* reduce AAgrammar91Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new91() /* reduce AAgrammar92Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new92() /* reduce AAgrammar93Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new93() /* reduce AAgrammar94Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new94() /* reduce AAgrammar95Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      Object nullNode7 = null;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
-      pastNode8 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new95() /* reduce AAgrammar96Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      Object nullNode8 = null;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
-      pastNode9 = (PAst)nodeArrayList6.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new96() /* reduce AAgrammar97Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
-      pastNode8 = (PAst)nodeArrayList2.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new97() /* reduce AAgrammar98Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
-      pastNode9 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new98() /* reduce AAgrammar99Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new99() /* reduce AAgrammar100Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new100() /* reduce AAgrammar101Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new101() /* reduce AAgrammar102Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new102() /* reduce AAgrammar103Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new103() /* reduce AAgrammar104Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new104() /* reduce AAgrammar105Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new105() /* reduce AAgrammar106Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new106() /* reduce AAgrammar107Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new107() /* reduce AAgrammar108Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new108() /* reduce AAgrammar109Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new109() /* reduce AAgrammar110Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new110() /* reduce AAgrammar111Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      Object nullNode6 = null;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-      pastNode8 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new111() /* reduce AAgrammar112Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      Object nullNode7 = null;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-      pastNode9 = (PAst)nodeArrayList6.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new112() /* reduce AAgrammar113Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-      pastNode8 = (PAst)nodeArrayList3.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new113() /* reduce AAgrammar114Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
-      pastNode9 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new114() /* reduce AAgrammar115Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new115() /* reduce AAgrammar116Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new116() /* reduce AAgrammar117Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new117() /* reduce AAgrammar118Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new118() /* reduce AAgrammar119Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      Object nullNode5 = null;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-      pastNode8 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new119() /* reduce AAgrammar120Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      Object nullNode6 = null;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-      pastNode9 = (PAst)nodeArrayList6.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new120() /* reduce AAgrammar121Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
-      pastNode8 = (PAst)nodeArrayList4.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new121() /* reduce AAgrammar122Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
-      pastNode9 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new122() /* reduce AAgrammar123Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      Object nullNode4 = null;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-      pastNode8 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new123() /* reduce AAgrammar124Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      Object nullNode5 = null;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-      pastNode9 = (PAst)nodeArrayList6.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new124() /* reduce AAgrammar125Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      Object nullNode3 = null;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      pstatesNode4 = (PStates)nodeArrayList1.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
-      pastNode8 = (PAst)nodeArrayList5.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new125() /* reduce AAgrammar126Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      pstatesNode5 = (PStates)nodeArrayList2.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
-      pastNode9 = (PAst)nodeArrayList6.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new126() /* reduce AAgrammar127Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      PHelpers phelpersNode3;
-      PStates pstatesNode4;
-      PTokens ptokensNode5;
-      PIgnTokens pigntokensNode6;
-      PProductions pproductionsNode7;
-      PAst pastNode8;
-      {}
-      phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-      pstatesNode4 = (PStates)nodeArrayList2.get(0);
-      ptokensNode5 = (PTokens)nodeArrayList3.get(0);
-      pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
-      pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
-      pastNode8 = (PAst)nodeArrayList6.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new127() /* reduce AAgrammar128Grammar */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList7 = (ArrayList) pop();
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PGrammar pgrammarNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PHelpers phelpersNode4;
-      PStates pstatesNode5;
-      PTokens ptokensNode6;
-      PIgnTokens pigntokensNode7;
-      PProductions pproductionsNode8;
-      PAst pastNode9;
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-      phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-      pstatesNode5 = (PStates)nodeArrayList3.get(0);
-      ptokensNode6 = (PTokens)nodeArrayList4.get(0);
-      pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
-      pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
-      pastNode9 = (PAst)nodeArrayList7.get(0);
-
-      pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
-    }
-    nodeList.add(pgrammarNode1);
-    return nodeList;
-  }
-
-  ArrayList new128() /* reduce APackage */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      listNode1 = (TypedLinkedList)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode2.addAll(listNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new129() /* reduce AApkgname1PkgName */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      TPkgId tpkgidNode1;
-      tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-      if(tpkgidNode1 != null)
-      {
-        listNode2.add(tpkgidNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new130() /* reduce AApkgname2PkgName */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TPkgId tpkgidNode1;
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-      if(tpkgidNode1 != null)
-      {
-        listNode3.add(tpkgidNode1);
-      }
-      if(listNode2 != null)
-      {
-        listNode3.addAll(listNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new131() /* reduce APkgNameTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TPkgId tpkgidNode1;
-    tpkgidNode1 = (TPkgId)nodeArrayList2.get(0);
-    nodeList.add(tpkgidNode1);
-    return nodeList;
-  }
-
-  ArrayList new132() /* reduce AHelpers */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PHelpers phelpersNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-
-      phelpersNode1 = new AHelpers(listNode3);
-    }
-    nodeList.add(phelpersNode1);
-    return nodeList;
-  }
-
-  ArrayList new133() /* reduce AHelperDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PHelperDef phelperdefNode1;
-    {
-      TId tidNode2;
-      PRegExp pregexpNode3;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      pregexpNode3 = (PRegExp)nodeArrayList3.get(0);
-
-      phelperdefNode1 = new AHelperDef(tidNode2, pregexpNode3);
-    }
-    nodeList.add(phelperdefNode1);
-    return nodeList;
-  }
-
-  ArrayList new134() /* reduce AStates */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PStates pstatesNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-
-      pstatesNode1 = new AStates(listNode3);
-    }
-    nodeList.add(pstatesNode1);
-    return nodeList;
-  }
-
-  ArrayList new135() /* reduce AAidlist1IdList */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      TId tidNode1;
-      tidNode1 = (TId)nodeArrayList1.get(0);
-      if(tidNode1 != null)
-      {
-        listNode2.add(tidNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new136() /* reduce AAidlist2IdList */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TId tidNode1;
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      tidNode1 = (TId)nodeArrayList1.get(0);
-      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-      if(tidNode1 != null)
-      {
-        listNode3.add(tidNode1);
-      }
-      if(listNode2 != null)
-      {
-        listNode3.addAll(listNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new137() /* reduce AIdListTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TId tidNode1;
-    tidNode1 = (TId)nodeArrayList2.get(0);
-    nodeList.add(tidNode1);
-    return nodeList;
-  }
-
-  ArrayList new138() /* reduce ATokens */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTokens ptokensNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-
-      ptokensNode1 = new ATokens(listNode3);
-    }
-    nodeList.add(ptokensNode1);
-    return nodeList;
-  }
-
-  ArrayList new139() /* reduce AAtokendef1TokenDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTokenDef ptokendefNode1;
-    {
-      Object nullNode2 = null;
-      TId tidNode3;
-      PRegExp pregexpNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      tidNode3 = (TId)nodeArrayList1.get(0);
-      pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
-
-      ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, null, null);
-    }
-    nodeList.add(ptokendefNode1);
-    return nodeList;
-  }
-
-  ArrayList new140() /* reduce AAtokendef2TokenDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTokenDef ptokendefNode1;
-    {
-      PStateList pstatelistNode2;
-      TId tidNode3;
-      PRegExp pregexpNode4;
-      Object nullNode5 = null;
-      Object nullNode6 = null;
-      pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
-      tidNode3 = (TId)nodeArrayList2.get(0);
-      pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
-
-      ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, null, null);
-    }
-    nodeList.add(ptokendefNode1);
-    return nodeList;
-  }
-
-  ArrayList new141() /* reduce AAtokendef3TokenDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTokenDef ptokendefNode1;
-    {
-      Object nullNode2 = null;
-      TId tidNode3;
-      PRegExp pregexpNode4;
-      TSlash tslashNode5;
-      PRegExp pregexpNode6;
-      tidNode3 = (TId)nodeArrayList1.get(0);
-      pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
-      tslashNode5 = (TSlash)nodeArrayList4.get(0);
-      pregexpNode6 = (PRegExp)nodeArrayList4.get(1);
-
-      ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
-    }
-    nodeList.add(ptokendefNode1);
-    return nodeList;
-  }
-
-  ArrayList new142() /* reduce AAtokendef4TokenDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList6 = (ArrayList) pop();
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTokenDef ptokendefNode1;
-    {
-      PStateList pstatelistNode2;
-      TId tidNode3;
-      PRegExp pregexpNode4;
-      TSlash tslashNode5;
-      PRegExp pregexpNode6;
-      pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
-      tidNode3 = (TId)nodeArrayList2.get(0);
-      pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
-      tslashNode5 = (TSlash)nodeArrayList5.get(0);
-      pregexpNode6 = (PRegExp)nodeArrayList5.get(1);
-
-      ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
-    }
-    nodeList.add(ptokendefNode1);
-    return nodeList;
-  }
-
-  ArrayList new143() /* reduce AAstatelist1StateList */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PStateList pstatelistNode1;
-    {
-      TId tidNode2;
-      Object nullNode3 = null;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList2.get(0);
-      {}
-
-      pstatelistNode1 = new AStateList(tidNode2, null, listNode4);
-    }
-    nodeList.add(pstatelistNode1);
-    return nodeList;
-  }
-
-  ArrayList new144() /* reduce AAstatelist2StateList */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PStateList pstatelistNode1;
-    {
-      TId tidNode2;
-      PTransition ptransitionNode3;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList2.get(0);
-      ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
-      {}
-
-      pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode4);
-    }
-    nodeList.add(pstatelistNode1);
-    return nodeList;
-  }
-
-  ArrayList new145() /* reduce AAstatelist3StateList */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PStateList pstatelistNode1;
-    {
-      TId tidNode2;
-      Object nullNode3 = null;
-      TypedLinkedList listNode5 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList2.get(0);
-      {
-        TypedLinkedList listNode4 = new TypedLinkedList();
-        listNode4 = (TypedLinkedList)nodeArrayList3.get(0);
-        if(listNode4 != null)
-        {
-          listNode5.addAll(listNode4);
-        }
-      }
-
-      pstatelistNode1 = new AStateList(tidNode2, null, listNode5);
-    }
-    nodeList.add(pstatelistNode1);
-    return nodeList;
-  }
-
-  ArrayList new146() /* reduce AAstatelist4StateList */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PStateList pstatelistNode1;
-    {
-      TId tidNode2;
-      PTransition ptransitionNode3;
-      TypedLinkedList listNode5 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList2.get(0);
-      ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
-      {
-        TypedLinkedList listNode4 = new TypedLinkedList();
-        listNode4 = (TypedLinkedList)nodeArrayList4.get(0);
-        if(listNode4 != null)
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        PAstAlt pastaltNode1;
+        LinkedList listNode2 = new LinkedList();
+        pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        if(pastaltNode1 != null)
+        {
+            listNode3.add(pastaltNode1);
+        }
+        if(listNode2 != null) //Macro:ParserTypedLinkedListAddAll
         {
-          listNode5.addAll(listNode4);
+            if(addElementsToNewList){
+                listNode3.addAll(listNode2);
+            }else{
+                listNode3 = listNode2;
+            }
+        }
         }
-      }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode5);
+        return containerList;
     }
-    nodeList.add(pstatelistNode1);
-    return nodeList;
-  }
 
-  ArrayList new147() /* reduce AAstatelisttail1StateListTail */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PStateListTail pstatelisttailNode1;
-    {
-      TId tidNode2;
-      Object nullNode3 = null;
-      tidNode2 = (TId)nodeArrayList2.get(0);
-
-      pstatelisttailNode1 = new AStateListTail(tidNode2, null);
-    }
-    nodeList.add(pstatelisttailNode1);
-    return nodeList;
-  }
-
-  ArrayList new148() /* reduce AAstatelisttail2StateListTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PStateListTail pstatelisttailNode1;
+
+    protected ArrayList new234() /* reduce AAstAltsTail */
     {
-      TId tidNode2;
-      PTransition ptransitionNode3;
-      tidNode2 = (TId)nodeArrayList2.get(0);
-      ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAstAltsTail");
+        ArrayList nodeList = new ArrayList();
 
-      pstatelisttailNode1 = new AStateListTail(tidNode2, ptransitionNode3);
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAstAlt pastaltNode1;
+        pastaltNode1 = (PAstAlt)nodeArrayList2.get(0);
+        nodeList.add(pastaltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
     }
-    nodeList.add(pstatelisttailNode1);
-    return nodeList;
-  }
 
-  ArrayList new149() /* reduce ATransition */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTransition ptransitionNode1;
+
+    protected ArrayList new235() /* reduce AAastalt1AstAlt */
     {
-      TId tidNode2;
-      tidNode2 = (TId)nodeArrayList2.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAastalt1AstAlt");
+        ArrayList nodeList = new ArrayList();
+
+        PAstAlt pastaltNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        }
+
+        pastaltNode1 = new AAstAlt(null, listNode3);
+        }
+        nodeList.add(pastaltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      ptransitionNode1 = new ATransition(tidNode2);
+        return containerList;
     }
-    nodeList.add(ptransitionNode1);
-    return nodeList;
-  }
 
-  ArrayList new150() /* reduce AAigntokens1IgnTokens */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PIgnTokens pigntokensNode1;
+
+    protected ArrayList new236() /* reduce AAastalt2AstAlt */
     {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      {}
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAastalt2AstAlt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PAstAlt pastaltNode1;
+        {
+            // Block
+        TId tidNode2;
+        LinkedList listNode3 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList1.get(0);
+        {
+            // Block
+        }
+
+        pastaltNode1 = new AAstAlt(tidNode2, listNode3);
+        }
+        nodeList.add(pastaltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pigntokensNode1 = new AIgnTokens(listNode2);
+        return containerList;
     }
-    nodeList.add(pigntokensNode1);
-    return nodeList;
-  }
 
-  ArrayList new151() /* reduce AAigntokens2IgnTokens */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PIgnTokens pigntokensNode1;
+
+    protected ArrayList new237() /* reduce AAastalt3AstAlt */
     {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList3.get(0);
-        if(listNode2 != null)
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAastalt3AstAlt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        PAstAlt pastaltNode1;
+        {
+            // Block
+          Object nullNode2 = null;
+        LinkedList listNode4 = new LinkedList();
         {
-          listNode3.addAll(listNode2);
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList1.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
         }
-      }
 
-      pigntokensNode1 = new AIgnTokens(listNode3);
-    }
-    nodeList.add(pigntokensNode1);
-    return nodeList;
-  }
+        pastaltNode1 = new AAstAlt(null, listNode4);
+        }
+        nodeList.add(pastaltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-  ArrayList new152() /* reduce ALookAhead */
-  {
-    ArrayList nodeList = new ArrayList();
+        return containerList;
+    }
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TSlash tslashNode1;
-    PRegExp pregexpNode2;
-    tslashNode1 = (TSlash)nodeArrayList1.get(0);
-    pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
-    nodeList.add(tslashNode1);
-    nodeList.add(pregexpNode2);
-    return nodeList;
-  }
 
-  ArrayList new153() /* reduce AAregexp1RegExp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PRegExp pregexpNode1;
+    protected ArrayList new238() /* reduce AAastalt4AstAlt */
     {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        PConcat pconcatNode2;
-        pconcatNode2 = (PConcat)nodeArrayList1.get(0);
-        if(pconcatNode2 != null)
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("AAastalt4AstAlt");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        PAstAlt pastaltNode1;
+        {
+            // Block
+        TId tidNode2;
+        LinkedList listNode4 = new LinkedList();
+        tidNode2 = (TId)nodeArrayList1.get(0);
         {
-          listNode3.add(pconcatNode2);
+            // Block
+        LinkedList listNode3 = new LinkedList();
+        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        if(listNode3 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode4.addAll(listNode3);
+            }else{
+                listNode4 = listNode3;
+            }
+        }
+        }
+
+        pastaltNode1 = new AAstAlt(tidNode2, listNode4);
         }
-      }
+        nodeList.add(pastaltNode1);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pregexpNode1 = new ARegExp(listNode3);
+        return containerList;
     }
-    nodeList.add(pregexpNode1);
-    return nodeList;
-  }
 
-  ArrayList new154() /* reduce AAregexp2RegExp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PRegExp pregexpNode1;
+
+    protected ArrayList new239() /* reduce ATerminal$PkgNameTail */
     {
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      {
-        PConcat pconcatNode2;
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        pconcatNode2 = (PConcat)nodeArrayList1.get(0);
-        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(pconcatNode2 != null)
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$PkgNameTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
         {
-          listNode4.add(pconcatNode2);
-        }
-        if(listNode3 != null)
+            // Block
+        TPkgId tpkgidNode1;
+        tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+        if(tpkgidNode1 != null)
         {
-          listNode4.addAll(listNode3);
+            listNode2.add(tpkgidNode1);
         }
-      }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pregexpNode1 = new ARegExp(listNode4);
+        return containerList;
     }
-    nodeList.add(pregexpNode1);
-    return nodeList;
-  }
-
-  ArrayList new155() /* reduce ARegExpTail */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PConcat pconcatNode1;
-    pconcatNode1 = (PConcat)nodeArrayList2.get(0);
-    nodeList.add(pconcatNode1);
-    return nodeList;
-  }
 
-  ArrayList new156() /* reduce AAconcat1Concat */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    PConcat pconcatNode1;
+    protected ArrayList new240() /* reduce ANonTerminal$PkgNameTail */
     {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      {}
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$PkgNameTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        TPkgId tpkgidNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        tpkgidNode2 = (TPkgId)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(tpkgidNode2 != null)
+        {
+            listNode3.add(tpkgidNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pconcatNode1 = new AConcat(listNode2);
+        return containerList;
     }
-    nodeList.add(pconcatNode1);
-    return nodeList;
-  }
 
-  ArrayList new157() /* reduce AAconcat2Concat */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PConcat pconcatNode1;
+
+    protected ArrayList new241() /* reduce ATerminal$HelperDef */
     {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$HelperDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PHelperDef phelperdefNode1;
+        phelperdefNode1 = (PHelperDef)nodeArrayList1.get(0);
+        if(phelperdefNode1 != null)
         {
-          listNode3.addAll(listNode2);
+            listNode2.add(phelperdefNode1);
         }
-      }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pconcatNode1 = new AConcat(listNode3);
+        return containerList;
     }
-    nodeList.add(pconcatNode1);
-    return nodeList;
-  }
 
-  ArrayList new158() /* reduce AAunexp1UnExp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PUnExp punexpNode1;
+
+    protected ArrayList new242() /* reduce ANonTerminal$HelperDef */
     {
-      PBasic pbasicNode2;
-      Object nullNode3 = null;
-      pbasicNode2 = (PBasic)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$HelperDef");
+        ArrayList nodeList = new ArrayList();
 
-      punexpNode1 = new AUnExp(pbasicNode2, null);
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PHelperDef phelperdefNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        phelperdefNode2 = (PHelperDef)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(phelperdefNode2 != null)
+        {
+            listNode3.add(phelperdefNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
     }
-    nodeList.add(punexpNode1);
-    return nodeList;
-  }
 
-  ArrayList new159() /* reduce AAunexp2UnExp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PUnExp punexpNode1;
+
+    protected ArrayList new243() /* reduce ATerminal$IdListTail */
     {
-      PBasic pbasicNode2;
-      PUnOp punopNode3;
-      pbasicNode2 = (PBasic)nodeArrayList1.get(0);
-      punopNode3 = (PUnOp)nodeArrayList2.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$IdListTail");
+        ArrayList nodeList = new ArrayList();
 
-      punexpNode1 = new AUnExp(pbasicNode2, punopNode3);
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        TId tidNode1;
+        tidNode1 = (TId)nodeArrayList1.get(0);
+        if(tidNode1 != null)
+        {
+            listNode2.add(tidNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
     }
-    nodeList.add(punexpNode1);
-    return nodeList;
-  }
 
-  ArrayList new160() /* reduce ACharBasic */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PBasic pbasicNode1;
+
+    protected ArrayList new244() /* reduce ANonTerminal$IdListTail */
     {
-      PChar pcharNode2;
-      pcharNode2 = (PChar)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$IdListTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        TId tidNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        tidNode2 = (TId)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(tidNode2 != null)
+        {
+            listNode3.add(tidNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pbasicNode1 = new ACharBasic(pcharNode2);
+        return containerList;
     }
-    nodeList.add(pbasicNode1);
-    return nodeList;
-  }
 
-  ArrayList new161() /* reduce ASetBasic */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PBasic pbasicNode1;
+
+    protected ArrayList new245() /* reduce ATerminal$TokenDef */
     {
-      PSet psetNode2;
-      psetNode2 = (PSet)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$TokenDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PTokenDef ptokendefNode1;
+        ptokendefNode1 = (PTokenDef)nodeArrayList1.get(0);
+        if(ptokendefNode1 != null)
+        {
+            listNode2.add(ptokendefNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pbasicNode1 = new ASetBasic(psetNode2);
+        return containerList;
     }
-    nodeList.add(pbasicNode1);
-    return nodeList;
-  }
 
-  ArrayList new162() /* reduce AStringBasic */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PBasic pbasicNode1;
+
+    protected ArrayList new246() /* reduce ANonTerminal$TokenDef */
     {
-      TString tstringNode2;
-      tstringNode2 = (TString)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$TokenDef");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PTokenDef ptokendefNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        ptokendefNode2 = (PTokenDef)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(ptokendefNode2 != null)
+        {
+            listNode3.add(ptokendefNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pbasicNode1 = new AStringBasic(tstringNode2);
+        return containerList;
     }
-    nodeList.add(pbasicNode1);
-    return nodeList;
-  }
 
-  ArrayList new163() /* reduce AIdBasic */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PBasic pbasicNode1;
+
+    protected ArrayList new247() /* reduce ATerminal$StateListTail */
     {
-      TId tidNode2;
-      tidNode2 = (TId)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$StateListTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PStateListTail pstatelisttailNode1;
+        pstatelisttailNode1 = (PStateListTail)nodeArrayList1.get(0);
+        if(pstatelisttailNode1 != null)
+        {
+            listNode2.add(pstatelisttailNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pbasicNode1 = new AIdBasic(tidNode2);
+        return containerList;
     }
-    nodeList.add(pbasicNode1);
-    return nodeList;
-  }
 
-  ArrayList new164() /* reduce ARegExpBasic */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PBasic pbasicNode1;
+
+    protected ArrayList new248() /* reduce ANonTerminal$StateListTail */
     {
-      PRegExp pregexpNode2;
-      pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$StateListTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PStateListTail pstatelisttailNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        pstatelisttailNode2 = (PStateListTail)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(pstatelisttailNode2 != null)
+        {
+            listNode3.add(pstatelisttailNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pbasicNode1 = new ARegExpBasic(pregexpNode2);
+        return containerList;
     }
-    nodeList.add(pbasicNode1);
-    return nodeList;
-  }
 
-  ArrayList new165() /* reduce ACharChar */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PChar pcharNode1;
+
+    protected ArrayList new249() /* reduce ATerminal$RegExpTail */
     {
-      TChar tcharNode2;
-      tcharNode2 = (TChar)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$RegExpTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PConcat pconcatNode1;
+        pconcatNode1 = (PConcat)nodeArrayList1.get(0);
+        if(pconcatNode1 != null)
+        {
+            listNode2.add(pconcatNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pcharNode1 = new ACharChar(tcharNode2);
+        return containerList;
     }
-    nodeList.add(pcharNode1);
-    return nodeList;
-  }
 
-  ArrayList new166() /* reduce ADecChar */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PChar pcharNode1;
+
+    protected ArrayList new250() /* reduce ANonTerminal$RegExpTail */
     {
-      TDecChar tdeccharNode2;
-      tdeccharNode2 = (TDecChar)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$RegExpTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PConcat pconcatNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        pconcatNode2 = (PConcat)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(pconcatNode2 != null)
+        {
+            listNode3.add(pconcatNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pcharNode1 = new ADecChar(tdeccharNode2);
+        return containerList;
     }
-    nodeList.add(pcharNode1);
-    return nodeList;
-  }
 
-  ArrayList new167() /* reduce AHexChar */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PChar pcharNode1;
+
+    protected ArrayList new251() /* reduce ATerminal$UnExp */
     {
-      THexChar thexcharNode2;
-      thexcharNode2 = (THexChar)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$UnExp");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PUnExp punexpNode1;
+        punexpNode1 = (PUnExp)nodeArrayList1.get(0);
+        if(punexpNode1 != null)
+        {
+            listNode2.add(punexpNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pcharNode1 = new AHexChar(thexcharNode2);
+        return containerList;
     }
-    nodeList.add(pcharNode1);
-    return nodeList;
-  }
 
-  ArrayList new168() /* reduce AOperationSet */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PSet psetNode1;
+
+    protected ArrayList new252() /* reduce ANonTerminal$UnExp */
     {
-      PBasic pbasicNode2;
-      PBinOp pbinopNode3;
-      PBasic pbasicNode4;
-      pbasicNode2 = (PBasic)nodeArrayList2.get(0);
-      pbinopNode3 = (PBinOp)nodeArrayList3.get(0);
-      pbasicNode4 = (PBasic)nodeArrayList4.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$UnExp");
+        ArrayList nodeList = new ArrayList();
 
-      psetNode1 = new AOperationSet(pbasicNode2, pbinopNode3, pbasicNode4);
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PUnExp punexpNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        punexpNode2 = (PUnExp)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(punexpNode2 != null)
+        {
+            listNode3.add(punexpNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
     }
-    nodeList.add(psetNode1);
-    return nodeList;
-  }
 
-  ArrayList new169() /* reduce AIntervalSet */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PSet psetNode1;
+
+    protected ArrayList new253() /* reduce ATerminal$Prod */
     {
-      PChar pcharNode2;
-      PChar pcharNode3;
-      pcharNode2 = (PChar)nodeArrayList2.get(0);
-      pcharNode3 = (PChar)nodeArrayList4.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$Prod");
+        ArrayList nodeList = new ArrayList();
 
-      psetNode1 = new AIntervalSet(pcharNode2, pcharNode3);
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PProd pprodNode1;
+        pprodNode1 = (PProd)nodeArrayList1.get(0);
+        if(pprodNode1 != null)
+        {
+            listNode2.add(pprodNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
     }
-    nodeList.add(psetNode1);
-    return nodeList;
-  }
 
-  ArrayList new170() /* reduce AStarUnOp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PUnOp punopNode1;
+
+    protected ArrayList new254() /* reduce ANonTerminal$Prod */
     {
-      TStar tstarNode2;
-      tstarNode2 = (TStar)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$Prod");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PProd pprodNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        pprodNode2 = (PProd)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(pprodNode2 != null)
+        {
+            listNode3.add(pprodNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      punopNode1 = new AStarUnOp(tstarNode2);
+        return containerList;
     }
-    nodeList.add(punopNode1);
-    return nodeList;
-  }
 
-  ArrayList new171() /* reduce AQMarkUnOp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PUnOp punopNode1;
+
+    protected ArrayList new255() /* reduce ATerminal$Elem */
     {
-      TQMark tqmarkNode2;
-      tqmarkNode2 = (TQMark)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PElem pelemNode1;
+        pelemNode1 = (PElem)nodeArrayList1.get(0);
+        if(pelemNode1 != null)
+        {
+            listNode2.add(pelemNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      punopNode1 = new AQMarkUnOp(tqmarkNode2);
+        return containerList;
     }
-    nodeList.add(punopNode1);
-    return nodeList;
-  }
 
-  ArrayList new172() /* reduce APlusUnOp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PUnOp punopNode1;
+
+    protected ArrayList new256() /* reduce ANonTerminal$Elem */
     {
-      TPlus tplusNode2;
-      tplusNode2 = (TPlus)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$Elem");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PElem pelemNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        pelemNode2 = (PElem)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(pelemNode2 != null)
+        {
+            listNode3.add(pelemNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      punopNode1 = new APlusUnOp(tplusNode2);
+        return containerList;
     }
-    nodeList.add(punopNode1);
-    return nodeList;
-  }
 
-  ArrayList new173() /* reduce APlusBinOp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PBinOp pbinopNode1;
+
+    protected ArrayList new257() /* reduce ATerminal$AltsTail */
     {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$AltsTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PAlt paltNode1;
+        paltNode1 = (PAlt)nodeArrayList1.get(0);
+        if(paltNode1 != null)
+        {
+            listNode2.add(paltNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pbinopNode1 = new APlusBinOp();
+        return containerList;
     }
-    nodeList.add(pbinopNode1);
-    return nodeList;
-  }
 
-  ArrayList new174() /* reduce AMinusBinOp */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PBinOp pbinopNode1;
+
+    protected ArrayList new258() /* reduce ANonTerminal$AltsTail */
     {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$AltsTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PAlt paltNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        paltNode2 = (PAlt)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(paltNode2 != null)
+        {
+            listNode3.add(paltNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pbinopNode1 = new AMinusBinOp();
+        return containerList;
     }
-    nodeList.add(pbinopNode1);
-    return nodeList;
-  }
 
-  ArrayList new175() /* reduce AProductions */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PProductions pproductionsNode1;
+
+    protected ArrayList new259() /* reduce ATerminal$Term */
     {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$Term");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PTerm ptermNode1;
+        ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        if(ptermNode1 != null)
         {
-          listNode3.addAll(listNode2);
+            listNode2.add(ptermNode1);
         }
-      }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pproductionsNode1 = new AProductions(listNode3);
+        return containerList;
     }
-    nodeList.add(pproductionsNode1);
-    return nodeList;
-  }
 
-  ArrayList new176() /* reduce AAprod1Prod */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PProd pprodNode1;
+
+    protected ArrayList new260() /* reduce ANonTerminal$Term */
     {
-      TId tidNode2;
-      Object nullNode3 = null;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      TypedLinkedList listNode6 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {}
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$Term");
+        ArrayList nodeList = new ArrayList();
 
-      {
-        TypedLinkedList listNode5 = new TypedLinkedList();
-        listNode5 = (TypedLinkedList)nodeArrayList3.get(0);
-        if(listNode5 != null)
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PTerm ptermNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        ptermNode2 = (PTerm)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(ptermNode2 != null)
         {
-          listNode6.addAll(listNode5);
+            listNode3.add(ptermNode2);
+        }
         }
-      }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      pprodNode1 = new AProd(tidNode2, null, listNode4, listNode6);
+        return containerList;
     }
-    nodeList.add(pprodNode1);
-    return nodeList;
-  }
 
-  ArrayList new177() /* reduce AAprod2Prod */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PProd pprodNode1;
-    {
-      TId tidNode2;
-      TArrow tarrowNode3;
-      TypedLinkedList listNode5 = new TypedLinkedList();
-      TypedLinkedList listNode7 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      tarrowNode3 = (TArrow)nodeArrayList2.get(0);
-      {
-        TypedLinkedList listNode4 = new TypedLinkedList();
-        listNode4 = (TypedLinkedList)nodeArrayList2.get(1);
-        if(listNode4 != null)
-        {
-          listNode5.addAll(listNode4);
-        }
-      }
-      {
-        TypedLinkedList listNode6 = new TypedLinkedList();
-        listNode6 = (TypedLinkedList)nodeArrayList4.get(0);
-        if(listNode6 != null)
-        {
-          listNode7.addAll(listNode6);
-        }
-      }
-
-      pprodNode1 = new AProd(tidNode2, tarrowNode3, listNode5, listNode7);
-    }
-    nodeList.add(pprodNode1);
-    return nodeList;
-  }
-
-  ArrayList new178() /* reduce AAprodtransform1ProdTransform */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TArrow tarrowNode1;
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    tarrowNode1 = (TArrow)nodeArrayList2.get(0);
-    {}
-    nodeList.add(tarrowNode1);
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new179() /* reduce AAprodtransform2ProdTransform */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TArrow tarrowNode1;
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    tarrowNode1 = (TArrow)nodeArrayList2.get(0);
-    {
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      listNode2 = (TypedLinkedList)nodeArrayList3.get(0);
-      if(listNode2 != null)
-      {
-        listNode3.addAll(listNode2);
-      }
-    }
-    nodeList.add(tarrowNode1);
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new180() /* reduce AAalts1Alts */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PAlt paltNode1;
-      paltNode1 = (PAlt)nodeArrayList1.get(0);
-      if(paltNode1 != null)
-      {
-        listNode2.add(paltNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new181() /* reduce AAalts2Alts */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      PAlt paltNode1;
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      paltNode1 = (PAlt)nodeArrayList1.get(0);
-      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-      if(paltNode1 != null)
-      {
-        listNode3.add(paltNode1);
-      }
-      if(listNode2 != null)
-      {
-        listNode3.addAll(listNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new182() /* reduce AAltsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
-    paltNode1 = (PAlt)nodeArrayList2.get(0);
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
-
-  ArrayList new183() /* reduce AAalt1Alt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    PAlt paltNode1;
-    {
-      Object nullNode2 = null;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      {}
-
-      paltNode1 = new AAlt(null, listNode3, null);
-    }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
-
-  ArrayList new184() /* reduce AAalt2Alt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
-    {
-      TId tidNode2;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      Object nullNode4 = null;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {}
-
-      paltNode1 = new AAlt(tidNode2, listNode3, null);
-    }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
-
-  ArrayList new185() /* reduce AAalt3Alt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
-    {
-      Object nullNode2 = null;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      Object nullNode5 = null;
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-          listNode4.addAll(listNode3);
-        }
-      }
-
-      paltNode1 = new AAlt(null, listNode4, null);
-    }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
-
-  ArrayList new186() /* reduce AAalt4Alt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
-    {
-      TId tidNode2;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      Object nullNode5 = null;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode3 != null)
+
+    protected ArrayList new261() /* reduce ATerminal$ListTermTail */
+    {
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$ListTermTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PListTerm plisttermNode1;
+        plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+        if(plisttermNode1 != null)
         {
-          listNode4.addAll(listNode3);
+            listNode2.add(plisttermNode1);
         }
-      }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      paltNode1 = new AAlt(tidNode2, listNode4, null);
+        return containerList;
     }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
 
-  ArrayList new187() /* reduce AAalt5Alt */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
+
+    protected ArrayList new262() /* reduce ANonTerminal$ListTermTail */
     {
-      Object nullNode2 = null;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PAltTransform palttransformNode4;
-      {}
-      palttransformNode4 = (PAltTransform)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$ListTermTail");
+        ArrayList nodeList = new ArrayList();
 
-      paltNode1 = new AAlt(null, listNode3, palttransformNode4);
-    }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PListTerm plisttermNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        plisttermNode2 = (PListTerm)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(plisttermNode2 != null)
+        {
+            listNode3.add(plisttermNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-  ArrayList new188() /* reduce AAalt6Alt */
-  {
-    ArrayList nodeList = new ArrayList();
+        return containerList;
+    }
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
-    {
-      TId tidNode2;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      PAltTransform palttransformNode4;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {}
-      palttransformNode4 = (PAltTransform)nodeArrayList2.get(0);
-
-      paltNode1 = new AAlt(tidNode2, listNode3, palttransformNode4);
-    }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
 
-  ArrayList new189() /* reduce AAalt7Alt */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
+    protected ArrayList new263() /* reduce ATerminal$ParamsTail */
     {
-      Object nullNode2 = null;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      PAltTransform palttransformNode5;
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-          listNode4.addAll(listNode3);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$ParamsTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PTerm ptermNode1;
+        ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        if(ptermNode1 != null)
+        {
+            listNode2.add(ptermNode1);
         }
-      }
-      palttransformNode5 = (PAltTransform)nodeArrayList2.get(0);
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      paltNode1 = new AAlt(null, listNode4, palttransformNode5);
+        return containerList;
     }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
 
-  ArrayList new190() /* reduce AAalt8Alt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAlt paltNode1;
-    {
-      TId tidNode2;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      PAltTransform palttransformNode5;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-          listNode4.addAll(listNode3);
-        }
-      }
-      palttransformNode5 = (PAltTransform)nodeArrayList3.get(0);
-
-      paltNode1 = new AAlt(tidNode2, listNode4, palttransformNode5);
-    }
-    nodeList.add(paltNode1);
-    return nodeList;
-  }
-
-  ArrayList new191() /* reduce AAalttransform1AltTransform */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAltTransform palttransformNode1;
-    {
-      TLBrace tlbraceNode2;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      TRBrace trbraceNode4;
-      tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
-      {}
-      trbraceNode4 = (TRBrace)nodeArrayList3.get(0);
-
-      palttransformNode1 = new AAltTransform(tlbraceNode2, listNode3, trbraceNode4);
-    }
-    nodeList.add(palttransformNode1);
-    return nodeList;
-  }
-
-  ArrayList new192() /* reduce AAalttransform2AltTransform */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAltTransform palttransformNode1;
-    {
-      TLBrace tlbraceNode2;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      TRBrace trbraceNode5;
-      tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList3.get(0);
-        if(listNode3 != null)
-        {
-          listNode4.addAll(listNode3);
-        }
-      }
-      trbraceNode5 = (TRBrace)nodeArrayList4.get(0);
-
-      palttransformNode1 = new AAltTransform(tlbraceNode2, listNode4, trbraceNode5);
-    }
-    nodeList.add(palttransformNode1);
-    return nodeList;
-  }
-
-  ArrayList new193() /* reduce AAnewterm1Term */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
-    {
-      PProdName pprodnameNode2;
-      TLPar tlparNode3;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
-      tlparNode3 = (TLPar)nodeArrayList3.get(0);
-      {}
-
-      ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode4);
-    }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
-
-  ArrayList new194() /* reduce AAnewterm2Term */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
-    {
-      PProdName pprodnameNode2;
-      TLPar tlparNode3;
-      TypedLinkedList listNode5 = new TypedLinkedList();
-      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
-      tlparNode3 = (TLPar)nodeArrayList3.get(0);
-      {
-        TypedLinkedList listNode4 = new TypedLinkedList();
-        listNode4 = (TypedLinkedList)nodeArrayList4.get(0);
-        if(listNode4 != null)
-        {
-          listNode5.addAll(listNode4);
-        }
-      }
-
-      ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode5);
-    }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
-
-  ArrayList new195() /* reduce AAlistterm1Term */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
+
+
+    protected ArrayList new264() /* reduce ANonTerminal$ParamsTail */
     {
-      TLBkt tlbktNode2;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
-      {}
-
-      ptermNode1 = new AListTerm(tlbktNode2, listNode3);
-    }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
-
-  ArrayList new196() /* reduce AAlistterm2Term */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
-    {
-      TLBkt tlbktNode2;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode3 != null)
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$ParamsTail");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PTerm ptermNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        ptermNode2 = (PTerm)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(ptermNode2 != null)
         {
-          listNode4.addAll(listNode3);
+            listNode3.add(ptermNode2);
         }
-      }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      ptermNode1 = new AListTerm(tlbktNode2, listNode4);
+        return containerList;
     }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
 
-  ArrayList new197() /* reduce AAsimpleterm1Term */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
+
+    protected ArrayList new265() /* reduce ATerminal$AstProd */
     {
-      Object nullNode2 = null;
-      TId tidNode3;
-      Object nullNode4 = null;
-      tidNode3 = (TId)nodeArrayList1.get(0);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$AstProd");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PAstProd pastprodNode1;
+        pastprodNode1 = (PAstProd)nodeArrayList1.get(0);
+        if(pastprodNode1 != null)
+        {
+            listNode2.add(pastprodNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-      ptermNode1 = new ASimpleTerm(null, tidNode3, null);
+        return containerList;
     }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
 
-  ArrayList new198() /* reduce AAsimpleterm2Term */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
+
+    protected ArrayList new266() /* reduce ANonTerminal$AstProd */
     {
-      PSpecifier pspecifierNode2;
-      TId tidNode3;
-      Object nullNode4 = null;
-      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
-      tidNode3 = (TId)nodeArrayList2.get(0);
-
-      ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, null);
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$AstProd");
+        ArrayList nodeList = new ArrayList();
+
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PAstProd pastprodNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        pastprodNode2 = (PAstProd)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(pastprodNode2 != null)
+        {
+            listNode3.add(pastprodNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
     }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
 
-  ArrayList new199() /* reduce AAsimpleterm3Term */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
-    {
-      Object nullNode2 = null;
-      TId tidNode3;
-      TId tidNode4;
-      tidNode3 = (TId)nodeArrayList1.get(0);
-      tidNode4 = (TId)nodeArrayList2.get(0);
-
-      ptermNode1 = new ASimpleTerm(null, tidNode3, tidNode4);
-    }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
-
-  ArrayList new200() /* reduce AAsimpleterm4Term */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
-    {
-      PSpecifier pspecifierNode2;
-      TId tidNode3;
-      TId tidNode4;
-      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
-      tidNode3 = (TId)nodeArrayList2.get(0);
-      tidNode4 = (TId)nodeArrayList3.get(0);
-
-      ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, tidNode4);
-    }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
-
-  ArrayList new201() /* reduce ANullTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
-    {
-
-      ptermNode1 = new ANullTerm();
-    }
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
-
-  ArrayList new202() /* reduce AAlistoflistterm1ListOfListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PListTerm plisttermNode1;
-      plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-      if(plisttermNode1 != null)
-      {
-        listNode2.add(plisttermNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new203() /* reduce AAlistoflistterm2ListOfListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      PListTerm plisttermNode1;
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-      if(plisttermNode1 != null)
-      {
-        listNode3.add(plisttermNode1);
-      }
-      if(listNode2 != null)
-      {
-        listNode3.addAll(listNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new204() /* reduce AAnewlistterm1ListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PListTerm plisttermNode1;
-    {
-      PProdName pprodnameNode2;
-      TLPar tlparNode3;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
-      tlparNode3 = (TLPar)nodeArrayList3.get(0);
-      {}
-
-      plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode4);
-    }
-    nodeList.add(plisttermNode1);
-    return nodeList;
-  }
-
-  ArrayList new205() /* reduce AAnewlistterm2ListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList5 = (ArrayList) pop();
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PListTerm plisttermNode1;
-    {
-      PProdName pprodnameNode2;
-      TLPar tlparNode3;
-      TypedLinkedList listNode5 = new TypedLinkedList();
-      pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
-      tlparNode3 = (TLPar)nodeArrayList3.get(0);
-      {
-        TypedLinkedList listNode4 = new TypedLinkedList();
-        listNode4 = (TypedLinkedList)nodeArrayList4.get(0);
-        if(listNode4 != null)
-        {
-          listNode5.addAll(listNode4);
-        }
-      }
-
-      plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode5);
-    }
-    nodeList.add(plisttermNode1);
-    return nodeList;
-  }
-
-  ArrayList new206() /* reduce AAsimplelistterm1ListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PListTerm plisttermNode1;
-    {
-      Object nullNode2 = null;
-      TId tidNode3;
-      Object nullNode4 = null;
-      tidNode3 = (TId)nodeArrayList1.get(0);
-
-      plisttermNode1 = new ASimpleListTerm(null, tidNode3, null);
-    }
-    nodeList.add(plisttermNode1);
-    return nodeList;
-  }
-
-  ArrayList new207() /* reduce AAsimplelistterm2ListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PListTerm plisttermNode1;
-    {
-      PSpecifier pspecifierNode2;
-      TId tidNode3;
-      Object nullNode4 = null;
-      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
-      tidNode3 = (TId)nodeArrayList2.get(0);
-
-      plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, null);
-    }
-    nodeList.add(plisttermNode1);
-    return nodeList;
-  }
-
-  ArrayList new208() /* reduce AAsimplelistterm3ListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PListTerm plisttermNode1;
-    {
-      Object nullNode2 = null;
-      TId tidNode3;
-      TId tidNode4;
-      tidNode3 = (TId)nodeArrayList1.get(0);
-      tidNode4 = (TId)nodeArrayList2.get(0);
-
-      plisttermNode1 = new ASimpleListTerm(null, tidNode3, tidNode4);
-    }
-    nodeList.add(plisttermNode1);
-    return nodeList;
-  }
-
-  ArrayList new209() /* reduce AAsimplelistterm4ListTerm */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PListTerm plisttermNode1;
-    {
-      PSpecifier pspecifierNode2;
-      TId tidNode3;
-      TId tidNode4;
-      pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
-      tidNode3 = (TId)nodeArrayList2.get(0);
-      tidNode4 = (TId)nodeArrayList3.get(0);
-
-      plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, tidNode4);
-    }
-    nodeList.add(plisttermNode1);
-    return nodeList;
-  }
-
-  ArrayList new210() /* reduce AListTermTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PListTerm plisttermNode1;
-    plisttermNode1 = (PListTerm)nodeArrayList2.get(0);
-    nodeList.add(plisttermNode1);
-    return nodeList;
-  }
-
-  ArrayList new211() /* reduce ASimpleTermTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TId tidNode1;
-    tidNode1 = (TId)nodeArrayList2.get(0);
-    nodeList.add(tidNode1);
-    return nodeList;
-  }
-
-  ArrayList new212() /* reduce AAprodname1ProdName */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PProdName pprodnameNode1;
-    {
-      TId tidNode2;
-      Object nullNode3 = null;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-
-      pprodnameNode1 = new AProdName(tidNode2, null);
-    }
-    nodeList.add(pprodnameNode1);
-    return nodeList;
-  }
-
-  ArrayList new213() /* reduce AAprodname2ProdName */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PProdName pprodnameNode1;
-    {
-      TId tidNode2;
-      TId tidNode3;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      tidNode3 = (TId)nodeArrayList2.get(0);
-
-      pprodnameNode1 = new AProdName(tidNode2, tidNode3);
-    }
-    nodeList.add(pprodnameNode1);
-    return nodeList;
-  }
-
-  ArrayList new214() /* reduce AProdNameTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TId tidNode1;
-    tidNode1 = (TId)nodeArrayList2.get(0);
-    nodeList.add(tidNode1);
-    return nodeList;
-  }
-
-  ArrayList new215() /* reduce AAparams1Params */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PTerm ptermNode1;
-      ptermNode1 = (PTerm)nodeArrayList1.get(0);
-      if(ptermNode1 != null)
-      {
-        listNode2.add(ptermNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new216() /* reduce AAparams2Params */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      PTerm ptermNode1;
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      ptermNode1 = (PTerm)nodeArrayList1.get(0);
-      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-      if(ptermNode1 != null)
-      {
-        listNode3.add(ptermNode1);
-      }
-      if(listNode2 != null)
-      {
-        listNode3.addAll(listNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new217() /* reduce AParamsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PTerm ptermNode1;
-    ptermNode1 = (PTerm)nodeArrayList2.get(0);
-    nodeList.add(ptermNode1);
-    return nodeList;
-  }
-
-  ArrayList new218() /* reduce AAltName */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TId tidNode1;
-    tidNode1 = (TId)nodeArrayList2.get(0);
-    nodeList.add(tidNode1);
-    return nodeList;
-  }
-
-  ArrayList new219() /* reduce AAelem1Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      Object nullNode2 = null;
-      Object nullNode3 = null;
-      TId tidNode4;
-      Object nullNode5 = null;
-      tidNode4 = (TId)nodeArrayList1.get(0);
-
-      pelemNode1 = new AElem(null, null, tidNode4, null);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new220() /* reduce AAelem2Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      TId tidNode2;
-      Object nullNode3 = null;
-      TId tidNode4;
-      Object nullNode5 = null;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      tidNode4 = (TId)nodeArrayList2.get(0);
-
-      pelemNode1 = new AElem(tidNode2, null, tidNode4, null);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new221() /* reduce AAelem3Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      Object nullNode2 = null;
-      PSpecifier pspecifierNode3;
-      TId tidNode4;
-      Object nullNode5 = null;
-      pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
-      tidNode4 = (TId)nodeArrayList2.get(0);
-
-      pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, null);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new222() /* reduce AAelem4Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      TId tidNode2;
-      PSpecifier pspecifierNode3;
-      TId tidNode4;
-      Object nullNode5 = null;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
-      tidNode4 = (TId)nodeArrayList3.get(0);
-
-      pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, null);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new223() /* reduce AAelem5Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      Object nullNode2 = null;
-      Object nullNode3 = null;
-      TId tidNode4;
-      PUnOp punopNode5;
-      tidNode4 = (TId)nodeArrayList1.get(0);
-      punopNode5 = (PUnOp)nodeArrayList2.get(0);
-
-      pelemNode1 = new AElem(null, null, tidNode4, punopNode5);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new224() /* reduce AAelem6Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      TId tidNode2;
-      Object nullNode3 = null;
-      TId tidNode4;
-      PUnOp punopNode5;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      tidNode4 = (TId)nodeArrayList2.get(0);
-      punopNode5 = (PUnOp)nodeArrayList3.get(0);
-
-      pelemNode1 = new AElem(tidNode2, null, tidNode4, punopNode5);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new225() /* reduce AAelem7Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      Object nullNode2 = null;
-      PSpecifier pspecifierNode3;
-      TId tidNode4;
-      PUnOp punopNode5;
-      pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
-      tidNode4 = (TId)nodeArrayList2.get(0);
-      punopNode5 = (PUnOp)nodeArrayList3.get(0);
-
-      pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, punopNode5);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new226() /* reduce AAelem8Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PElem pelemNode1;
-    {
-      TId tidNode2;
-      PSpecifier pspecifierNode3;
-      TId tidNode4;
-      PUnOp punopNode5;
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
-      tidNode4 = (TId)nodeArrayList3.get(0);
-      punopNode5 = (PUnOp)nodeArrayList4.get(0);
-
-      pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, punopNode5);
-    }
-    nodeList.add(pelemNode1);
-    return nodeList;
-  }
-
-  ArrayList new227() /* reduce AElemName */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TId tidNode1;
-    tidNode1 = (TId)nodeArrayList2.get(0);
-    nodeList.add(tidNode1);
-    return nodeList;
-  }
-
-  ArrayList new228() /* reduce ATokenSpecifier */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PSpecifier pspecifierNode1;
-    {
-
-      pspecifierNode1 = new ATokenSpecifier();
-    }
-    nodeList.add(pspecifierNode1);
-    return nodeList;
-  }
-
-  ArrayList new229() /* reduce AProductionSpecifier */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PSpecifier pspecifierNode1;
-    {
-
-      pspecifierNode1 = new AProductionSpecifier();
-    }
-    nodeList.add(pspecifierNode1);
-    return nodeList;
-  }
-
-  ArrayList new230() /* reduce AAst */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAst pastNode1;
-    {
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode2 = new TypedLinkedList();
-        listNode2 = (TypedLinkedList)nodeArrayList4.get(0);
-        if(listNode2 != null)
-        {
-          listNode3.addAll(listNode2);
-        }
-      }
-
-      pastNode1 = new AAst(listNode3);
-    }
-    nodeList.add(pastNode1);
-    return nodeList;
-  }
-
-  ArrayList new231() /* reduce AAstProd */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList4 = (ArrayList) pop();
-    ArrayList nodeArrayList3 = (ArrayList) pop();
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAstProd pastprodNode1;
-    {
-      TId tidNode2;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList3.get(0);
-        if(listNode3 != null)
-        {
-          listNode4.addAll(listNode3);
-        }
-      }
 
-      pastprodNode1 = new AAstProd(tidNode2, listNode4);
-    }
-    nodeList.add(pastprodNode1);
-    return nodeList;
-  }
-
-  ArrayList new232() /* reduce AAastalts1AstAlts */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
+    protected ArrayList new267() /* reduce ATerminal$AstAltsTail */
     {
-      PAstAlt pastaltNode1;
-      pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-      if(pastaltNode1 != null)
-      {
-        listNode2.add(pastaltNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ATerminal$AstAltsTail");
+        ArrayList nodeList = new ArrayList();
 
-  ArrayList new233() /* reduce AAastalts2AstAlts */
-  {
-    ArrayList nodeList = new ArrayList();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode2 = new LinkedList();
+        {
+            // Block
+        PAstAlt pastaltNode1;
+        pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+        if(pastaltNode1 != null)
+        {
+            listNode2.add(pastaltNode1);
+        }
+        }
+        nodeList.add(listNode2);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      PAstAlt pastaltNode1;
-      TypedLinkedList listNode2 = new TypedLinkedList();
-      pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-      listNode2 = (TypedLinkedList)nodeArrayList2.get(0);
-      if(pastaltNode1 != null)
-      {
-        listNode3.add(pastaltNode1);
-      }
-      if(listNode2 != null)
-      {
-        listNode3.addAll(listNode2);
-      }
+        return containerList;
     }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
 
-  ArrayList new234() /* reduce AAstAltsTail */
-  {
-    ArrayList nodeList = new ArrayList();
 
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAstAlt pastaltNode1;
-    pastaltNode1 = (PAstAlt)nodeArrayList2.get(0);
-    nodeList.add(pastaltNode1);
-    return nodeList;
-  }
 
-  ArrayList new235() /* reduce AAastalt1AstAlt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    PAstAlt pastaltNode1;
+    protected ArrayList new268() /* reduce ANonTerminal$AstAltsTail */
     {
-      Object nullNode2 = null;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      {}
+        this.firstPopped = null;
+        this.lastPopped = null;
+        final boolean addElementsToNewList = addElementsFromListToNewList("ANonTerminal$AstAltsTail");
+        ArrayList nodeList = new ArrayList();
 
-      pastaltNode1 = new AAstAlt(null, listNode3);
-    }
-    nodeList.add(pastaltNode1);
-    return nodeList;
-  }
-
-  ArrayList new236() /* reduce AAastalt2AstAlt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAstAlt pastaltNode1;
-    {
-      TId tidNode2;
-      TypedLinkedList listNode3 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {}
-
-      pastaltNode1 = new AAstAlt(tidNode2, listNode3);
-    }
-    nodeList.add(pastaltNode1);
-    return nodeList;
-  }
-
-  ArrayList new237() /* reduce AAastalt3AstAlt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAstAlt pastaltNode1;
-    {
-      Object nullNode2 = null;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-          listNode4.addAll(listNode3);
-        }
-      }
-
-      pastaltNode1 = new AAstAlt(null, listNode4);
-    }
-    nodeList.add(pastaltNode1);
-    return nodeList;
-  }
-
-  ArrayList new238() /* reduce AAastalt4AstAlt */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    PAstAlt pastaltNode1;
-    {
-      TId tidNode2;
-      TypedLinkedList listNode4 = new TypedLinkedList();
-      tidNode2 = (TId)nodeArrayList1.get(0);
-      {
-        TypedLinkedList listNode3 = new TypedLinkedList();
-        listNode3 = (TypedLinkedList)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-          listNode4.addAll(listNode3);
-        }
-      }
-
-      pastaltNode1 = new AAstAlt(tidNode2, listNode4);
-    }
-    nodeList.add(pastaltNode1);
-    return nodeList;
-  }
-
-  ArrayList new239() /* reduce ATerminal$PkgNameTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      TPkgId tpkgidNode1;
-      tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-      if(tpkgidNode1 != null)
-      {
-        listNode2.add(tpkgidNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new240() /* reduce ANonTerminal$PkgNameTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      TPkgId tpkgidNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      tpkgidNode2 = (TPkgId)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(tpkgidNode2 != null)
-      {
-        listNode3.add(tpkgidNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new241() /* reduce ATerminal$HelperDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PHelperDef phelperdefNode1;
-      phelperdefNode1 = (PHelperDef)nodeArrayList1.get(0);
-      if(phelperdefNode1 != null)
-      {
-        listNode2.add(phelperdefNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new242() /* reduce ANonTerminal$HelperDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PHelperDef phelperdefNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      phelperdefNode2 = (PHelperDef)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(phelperdefNode2 != null)
-      {
-        listNode3.add(phelperdefNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new243() /* reduce ATerminal$IdListTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      TId tidNode1;
-      tidNode1 = (TId)nodeArrayList1.get(0);
-      if(tidNode1 != null)
-      {
-        listNode2.add(tidNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new244() /* reduce ANonTerminal$IdListTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      TId tidNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      tidNode2 = (TId)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(tidNode2 != null)
-      {
-        listNode3.add(tidNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new245() /* reduce ATerminal$TokenDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PTokenDef ptokendefNode1;
-      ptokendefNode1 = (PTokenDef)nodeArrayList1.get(0);
-      if(ptokendefNode1 != null)
-      {
-        listNode2.add(ptokendefNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new246() /* reduce ANonTerminal$TokenDef */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PTokenDef ptokendefNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      ptokendefNode2 = (PTokenDef)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(ptokendefNode2 != null)
-      {
-        listNode3.add(ptokendefNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new247() /* reduce ATerminal$StateListTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PStateListTail pstatelisttailNode1;
-      pstatelisttailNode1 = (PStateListTail)nodeArrayList1.get(0);
-      if(pstatelisttailNode1 != null)
-      {
-        listNode2.add(pstatelisttailNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new248() /* reduce ANonTerminal$StateListTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PStateListTail pstatelisttailNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      pstatelisttailNode2 = (PStateListTail)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(pstatelisttailNode2 != null)
-      {
-        listNode3.add(pstatelisttailNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new249() /* reduce ATerminal$RegExpTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PConcat pconcatNode1;
-      pconcatNode1 = (PConcat)nodeArrayList1.get(0);
-      if(pconcatNode1 != null)
-      {
-        listNode2.add(pconcatNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new250() /* reduce ANonTerminal$RegExpTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PConcat pconcatNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      pconcatNode2 = (PConcat)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(pconcatNode2 != null)
-      {
-        listNode3.add(pconcatNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new251() /* reduce ATerminal$UnExp */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PUnExp punexpNode1;
-      punexpNode1 = (PUnExp)nodeArrayList1.get(0);
-      if(punexpNode1 != null)
-      {
-        listNode2.add(punexpNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new252() /* reduce ANonTerminal$UnExp */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PUnExp punexpNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      punexpNode2 = (PUnExp)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(punexpNode2 != null)
-      {
-        listNode3.add(punexpNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new253() /* reduce ATerminal$Prod */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PProd pprodNode1;
-      pprodNode1 = (PProd)nodeArrayList1.get(0);
-      if(pprodNode1 != null)
-      {
-        listNode2.add(pprodNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new254() /* reduce ANonTerminal$Prod */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PProd pprodNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      pprodNode2 = (PProd)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(pprodNode2 != null)
-      {
-        listNode3.add(pprodNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new255() /* reduce ATerminal$Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PElem pelemNode1;
-      pelemNode1 = (PElem)nodeArrayList1.get(0);
-      if(pelemNode1 != null)
-      {
-        listNode2.add(pelemNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new256() /* reduce ANonTerminal$Elem */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PElem pelemNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      pelemNode2 = (PElem)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(pelemNode2 != null)
-      {
-        listNode3.add(pelemNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new257() /* reduce ATerminal$AltsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PAlt paltNode1;
-      paltNode1 = (PAlt)nodeArrayList1.get(0);
-      if(paltNode1 != null)
-      {
-        listNode2.add(paltNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new258() /* reduce ANonTerminal$AltsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PAlt paltNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      paltNode2 = (PAlt)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(paltNode2 != null)
-      {
-        listNode3.add(paltNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new259() /* reduce ATerminal$Term */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PTerm ptermNode1;
-      ptermNode1 = (PTerm)nodeArrayList1.get(0);
-      if(ptermNode1 != null)
-      {
-        listNode2.add(ptermNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new260() /* reduce ANonTerminal$Term */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PTerm ptermNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      ptermNode2 = (PTerm)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(ptermNode2 != null)
-      {
-        listNode3.add(ptermNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new261() /* reduce ATerminal$ListTermTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PListTerm plisttermNode1;
-      plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-      if(plisttermNode1 != null)
-      {
-        listNode2.add(plisttermNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new262() /* reduce ANonTerminal$ListTermTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PListTerm plisttermNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      plisttermNode2 = (PListTerm)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(plisttermNode2 != null)
-      {
-        listNode3.add(plisttermNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new263() /* reduce ATerminal$ParamsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PTerm ptermNode1;
-      ptermNode1 = (PTerm)nodeArrayList1.get(0);
-      if(ptermNode1 != null)
-      {
-        listNode2.add(ptermNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new264() /* reduce ANonTerminal$ParamsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PTerm ptermNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      ptermNode2 = (PTerm)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(ptermNode2 != null)
-      {
-        listNode3.add(ptermNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new265() /* reduce ATerminal$AstProd */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PAstProd pastprodNode1;
-      pastprodNode1 = (PAstProd)nodeArrayList1.get(0);
-      if(pastprodNode1 != null)
-      {
-        listNode2.add(pastprodNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new266() /* reduce ANonTerminal$AstProd */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PAstProd pastprodNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      pastprodNode2 = (PAstProd)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(pastprodNode2 != null)
-      {
-        listNode3.add(pastprodNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  ArrayList new267() /* reduce ATerminal$AstAltsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode2 = new TypedLinkedList();
-    {
-      PAstAlt pastaltNode1;
-      pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-      if(pastaltNode1 != null)
-      {
-        listNode2.add(pastaltNode1);
-      }
-    }
-    nodeList.add(listNode2);
-    return nodeList;
-  }
-
-  ArrayList new268() /* reduce ANonTerminal$AstAltsTail */
-  {
-    ArrayList nodeList = new ArrayList();
-
-    ArrayList nodeArrayList2 = (ArrayList) pop();
-    ArrayList nodeArrayList1 = (ArrayList) pop();
-    TypedLinkedList listNode3 = new TypedLinkedList();
-    {
-      TypedLinkedList listNode1 = new TypedLinkedList();
-      PAstAlt pastaltNode2;
-      listNode1 = (TypedLinkedList)nodeArrayList1.get(0);
-      pastaltNode2 = (PAstAlt)nodeArrayList2.get(0);
-      if(listNode1 != null)
-      {
-        listNode3.addAll(listNode1);
-      }
-      if(pastaltNode2 != null)
-      {
-        listNode3.add(pastaltNode2);
-      }
-    }
-    nodeList.add(listNode3);
-    return nodeList;
-  }
-
-  private static int[][][] actionTable;
-  /*      {
-  			{{-1, REDUCE, 0}, {1, SHIFT, 1}, {2, SHIFT, 2}, {3, SHIFT, 3}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, ERROR, 1}, {0, SHIFT, 16}, },
-  			{{-1, ERROR, 2}, {33, SHIFT, 18}, },
-  			{{-1, ERROR, 3}, {33, SHIFT, 20}, },
-  			{{-1, ERROR, 4}, {22, SHIFT, 23}, {33, SHIFT, 24}, },
-  			{{-1, ERROR, 5}, {4, SHIFT, 28}, },
-  			{{-1, ERROR, 6}, {33, SHIFT, 29}, },
-  			{{-1, ERROR, 7}, {8, SHIFT, 32}, },
-  			{{-1, ERROR, 8}, {38, ACCEPT, -1}, },
-  			{{-1, REDUCE, 1}, {2, SHIFT, 2}, {3, SHIFT, 3}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 2}, {2, SHIFT, 2}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 4}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 8}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 16}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 32}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 64}, },
-  			{{-1, ERROR, 16}, {14, SHIFT, 54}, {16, SHIFT, 55}, },
-  			{{-1, REDUCE, 128}, },
-  			{{-1, REDUCE, 135}, {29, SHIFT, 58}, },
-  			{{-1, ERROR, 19}, {16, SHIFT, 61}, },
-  			{{-1, ERROR, 20}, {17, SHIFT, 62}, },
-  			{{-1, REDUCE, 241}, },
-  			{{-1, REDUCE, 132}, {33, SHIFT, 20}, },
-  			{{-1, ERROR, 23}, {33, SHIFT, 64}, },
-  			{{-1, ERROR, 24}, {17, SHIFT, 65}, },
-  			{{-1, REDUCE, 245}, },
-  			{{-1, ERROR, 26}, {33, SHIFT, 66}, },
-  			{{-1, REDUCE, 138}, {22, SHIFT, 23}, {33, SHIFT, 24}, },
-  			{{-1, ERROR, 28}, {16, SHIFT, 68}, {33, SHIFT, 18}, },
-  			{{-1, ERROR, 29}, {17, SHIFT, 70}, {22, SHIFT, 71}, },
-  			{{-1, REDUCE, 253}, },
-  			{{-1, REDUCE, 175}, {33, SHIFT, 29}, },
-  			{{-1, ERROR, 32}, {9, SHIFT, 74}, },
-  			{{-1, REDUCE, 3}, {2, SHIFT, 2}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 5}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 9}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 17}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 33}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 65}, },
-  			{{-1, REDUCE, 6}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 10}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 18}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 34}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 66}, },
-  			{{-1, REDUCE, 12}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 20}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 36}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 68}, },
-  			{{-1, REDUCE, 24}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 40}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 72}, },
-  			{{-1, REDUCE, 48}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 80}, },
-  			{{-1, REDUCE, 96}, },
-  			{{-1, ERROR, 54}, {0, SHIFT, 110}, },
-  			{{-1, REDUCE, 129}, },
-  			{{-1, REDUCE, 239}, },
-  			{{-1, ERROR, 57}, {14, SHIFT, 54}, {16, SHIFT, 111}, },
-  			{{-1, ERROR, 58}, {33, SHIFT, 113}, },
-  			{{-1, REDUCE, 243}, },
-  			{{-1, REDUCE, 136}, {29, SHIFT, 58}, },
-  			{{-1, REDUCE, 134}, },
-  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, REDUCE, 242}, },
-  			{{-1, ERROR, 64}, {23, SHIFT, 129}, {29, SHIFT, 130}, {31, SHIFT, 131}, },
-  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, ERROR, 66}, {17, SHIFT, 136}, },
-  			{{-1, REDUCE, 246}, },
-  			{{-1, REDUCE, 150}, },
-  			{{-1, ERROR, 69}, {16, SHIFT, 137}, },
-  			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
-  			{{-1, ERROR, 71}, {31, SHIFT, 151}, },
-  			{{-1, ERROR, 72}, {17, SHIFT, 152}, },
-  			{{-1, REDUCE, 254}, },
-  			{{-1, ERROR, 74}, {33, SHIFT, 153}, },
-  			{{-1, REDUCE, 7}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 11}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 19}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 35}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 67}, },
-  			{{-1, REDUCE, 13}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 21}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 37}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 69}, },
-  			{{-1, REDUCE, 25}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 41}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 73}, },
-  			{{-1, REDUCE, 49}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 81}, },
-  			{{-1, REDUCE, 97}, },
-  			{{-1, REDUCE, 14}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 22}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 38}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 70}, },
-  			{{-1, REDUCE, 26}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 42}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 74}, },
-  			{{-1, REDUCE, 50}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 82}, },
-  			{{-1, REDUCE, 98}, },
-  			{{-1, REDUCE, 28}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 44}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 76}, },
-  			{{-1, REDUCE, 52}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 84}, },
-  			{{-1, REDUCE, 100}, },
-  			{{-1, REDUCE, 56}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 88}, },
-  			{{-1, REDUCE, 104}, },
-  			{{-1, REDUCE, 112}, },
-  			{{-1, REDUCE, 131}, },
-  			{{-1, REDUCE, 130}, },
-  			{{-1, REDUCE, 240}, },
-  			{{-1, REDUCE, 137}, },
-  			{{-1, REDUCE, 244}, },
-  			{{-1, ERROR, 115}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, REDUCE, 163}, },
-  			{{-1, REDUCE, 165}, },
-  			{{-1, REDUCE, 166}, },
-  			{{-1, REDUCE, 167}, },
-  			{{-1, REDUCE, 162}, },
-  			{{-1, ERROR, 122}, {16, SHIFT, 194}, },
-  			{{-1, REDUCE, 153}, {28, SHIFT, 195}, },
-  			{{-1, REDUCE, 251}, },
-  			{{-1, REDUCE, 158}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
-  			{{-1, REDUCE, 160}, },
-  			{{-1, REDUCE, 161}, },
-  			{{-1, REDUCE, 157}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, REDUCE, 143}, },
-  			{{-1, ERROR, 130}, {33, SHIFT, 203}, },
-  			{{-1, ERROR, 131}, {33, SHIFT, 204}, },
-  			{{-1, REDUCE, 247}, },
-  			{{-1, ERROR, 133}, {23, SHIFT, 205}, {29, SHIFT, 130}, },
-  			{{-1, ERROR, 134}, {23, SHIFT, 207}, {29, SHIFT, 130}, },
-  			{{-1, ERROR, 135}, {16, SHIFT, 209}, {30, SHIFT, 210}, },
-  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, REDUCE, 151}, },
-  			{{-1, ERROR, 138}, {14, SHIFT, 213}, },
-  			{{-1, ERROR, 139}, {14, SHIFT, 214}, },
-  			{{-1, ERROR, 140}, {33, SHIFT, 215}, },
-  			{{-1, ERROR, 141}, {31, SHIFT, 216}, {33, SHIFT, 217}, },
-  			{{-1, REDUCE, 219}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
-  			{{-1, ERROR, 143}, {16, SHIFT, 219}, },
-  			{{-1, REDUCE, 180}, {28, SHIFT, 220}, },
-  			{{-1, REDUCE, 187}, },
-  			{{-1, REDUCE, 184}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 255}, },
-  			{{-1, ERROR, 148}, {12, SHIFT, 138}, {13, SHIFT, 139}, {33, SHIFT, 226}, },
-  			{{-1, ERROR, 149}, {33, SHIFT, 228}, },
-  			{{-1, REDUCE, 185}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
-  			{{-1, ERROR, 151}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {23, SHIFT, 231}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
-  			{{-1, ERROR, 153}, {17, SHIFT, 234}, },
-  			{{-1, REDUCE, 265}, },
-  			{{-1, REDUCE, 230}, {33, SHIFT, 153}, },
-  			{{-1, REDUCE, 15}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 23}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 39}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 71}, },
-  			{{-1, REDUCE, 27}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 43}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 75}, },
-  			{{-1, REDUCE, 51}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 83}, },
-  			{{-1, REDUCE, 99}, },
-  			{{-1, REDUCE, 29}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 45}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 77}, },
-  			{{-1, REDUCE, 53}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 85}, },
-  			{{-1, REDUCE, 101}, },
-  			{{-1, REDUCE, 57}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 89}, },
-  			{{-1, REDUCE, 105}, },
-  			{{-1, REDUCE, 113}, },
-  			{{-1, REDUCE, 30}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 46}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 78}, },
-  			{{-1, REDUCE, 54}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 86}, },
-  			{{-1, REDUCE, 102}, },
-  			{{-1, REDUCE, 58}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 90}, },
-  			{{-1, REDUCE, 106}, },
-  			{{-1, REDUCE, 114}, },
-  			{{-1, REDUCE, 60}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 92}, },
-  			{{-1, REDUCE, 108}, },
-  			{{-1, REDUCE, 116}, },
-  			{{-1, REDUCE, 120}, },
-  			{{-1, ERROR, 191}, {24, SHIFT, 257}, {25, SHIFT, 258}, },
-  			{{-1, REDUCE, 160}, {15, SHIFT, 260}, },
-  			{{-1, ERROR, 193}, {21, SHIFT, 261}, },
-  			{{-1, REDUCE, 133}, },
-  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, REDUCE, 249}, },
-  			{{-1, REDUCE, 154}, {28, SHIFT, 195}, },
-  			{{-1, REDUCE, 172}, },
-  			{{-1, REDUCE, 171}, },
-  			{{-1, REDUCE, 170}, },
-  			{{-1, REDUCE, 159}, },
-  			{{-1, REDUCE, 252}, },
-  			{{-1, REDUCE, 147}, {31, SHIFT, 131}, },
-  			{{-1, REDUCE, 149}, },
-  			{{-1, REDUCE, 144}, },
-  			{{-1, ERROR, 206}, {23, SHIFT, 265}, {29, SHIFT, 130}, },
-  			{{-1, REDUCE, 145}, },
-  			{{-1, REDUCE, 248}, },
-  			{{-1, REDUCE, 139}, },
-  			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, ERROR, 211}, {16, SHIFT, 267}, },
-  			{{-1, ERROR, 212}, {16, SHIFT, 268}, {30, SHIFT, 210}, },
-  			{{-1, REDUCE, 228}, },
-  			{{-1, REDUCE, 229}, },
-  			{{-1, ERROR, 215}, {19, SHIFT, 270}, },
-  			{{-1, ERROR, 216}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {23, SHIFT, 274}, {33, SHIFT, 275}, },
-  			{{-1, ERROR, 217}, {23, SHIFT, 279}, },
-  			{{-1, REDUCE, 223}, },
-  			{{-1, REDUCE, 176}, },
-  			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 257}, },
-  			{{-1, REDUCE, 181}, {28, SHIFT, 220}, },
-  			{{-1, ERROR, 223}, {31, SHIFT, 216}, },
-  			{{-1, REDUCE, 188}, },
-  			{{-1, REDUCE, 186}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 220}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
-  			{{-1, ERROR, 227}, {33, SHIFT, 284}, },
-  			{{-1, REDUCE, 221}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
-  			{{-1, REDUCE, 189}, },
-  			{{-1, REDUCE, 256}, },
-  			{{-1, REDUCE, 178}, },
-  			{{-1, ERROR, 232}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {23, SHIFT, 286}, {33, SHIFT, 142}, },
-  			{{-1, ERROR, 233}, {16, SHIFT, 287}, },
-  			{{-1, REDUCE, 235}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 288}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 266}, },
-  			{{-1, REDUCE, 31}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 47}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 79}, },
-  			{{-1, REDUCE, 55}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 87}, },
-  			{{-1, REDUCE, 103}, },
-  			{{-1, REDUCE, 59}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 91}, },
-  			{{-1, REDUCE, 107}, },
-  			{{-1, REDUCE, 115}, },
-  			{{-1, REDUCE, 61}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 93}, },
-  			{{-1, REDUCE, 109}, },
-  			{{-1, REDUCE, 117}, },
-  			{{-1, REDUCE, 121}, },
-  			{{-1, REDUCE, 62}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 94}, },
-  			{{-1, REDUCE, 110}, },
-  			{{-1, REDUCE, 118}, },
-  			{{-1, REDUCE, 122}, },
-  			{{-1, REDUCE, 124}, },
-  			{{-1, REDUCE, 173}, },
-  			{{-1, REDUCE, 174}, },
-  			{{-1, ERROR, 259}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
-  			{{-1, ERROR, 260}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, },
-  			{{-1, REDUCE, 164}, },
-  			{{-1, REDUCE, 155}, },
-  			{{-1, REDUCE, 250}, },
-  			{{-1, REDUCE, 148}, },
-  			{{-1, REDUCE, 146}, },
-  			{{-1, REDUCE, 152}, },
-  			{{-1, REDUCE, 141}, },
-  			{{-1, REDUCE, 140}, },
-  			{{-1, ERROR, 269}, {16, SHIFT, 302}, },
-  			{{-1, ERROR, 270}, {32, SHIFT, 303}, },
-  			{{-1, ERROR, 271}, {33, SHIFT, 304}, },
-  			{{-1, REDUCE, 201}, },
-  			{{-1, ERROR, 273}, {10, SHIFT, 306}, {12, SHIFT, 138}, {13, SHIFT, 139}, {19, SHIFT, 307}, {33, SHIFT, 308}, },
-  			{{-1, REDUCE, 191}, },
-  			{{-1, REDUCE, 197}, {14, SHIFT, 312}, },
-  			{{-1, REDUCE, 259}, },
-  			{{-1, ERROR, 277}, {33, SHIFT, 314}, },
-  			{{-1, ERROR, 278}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {23, SHIFT, 315}, {33, SHIFT, 275}, },
-  			{{-1, REDUCE, 218}, },
-  			{{-1, REDUCE, 182}, },
-  			{{-1, REDUCE, 258}, },
-  			{{-1, REDUCE, 190}, },
-  			{{-1, REDUCE, 224}, },
-  			{{-1, REDUCE, 222}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
-  			{{-1, REDUCE, 225}, },
-  			{{-1, REDUCE, 179}, },
-  			{{-1, REDUCE, 177}, },
-  			{{-1, ERROR, 288}, {33, SHIFT, 217}, },
-  			{{-1, REDUCE, 236}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
-  			{{-1, ERROR, 290}, {16, SHIFT, 319}, },
-  			{{-1, REDUCE, 232}, {28, SHIFT, 320}, },
-  			{{-1, REDUCE, 237}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 63}, {7, SHIFT, 7}, },
-  			{{-1, REDUCE, 95}, },
-  			{{-1, REDUCE, 111}, },
-  			{{-1, REDUCE, 119}, },
-  			{{-1, REDUCE, 123}, },
-  			{{-1, REDUCE, 125}, },
-  			{{-1, REDUCE, 126}, },
-  			{{-1, ERROR, 300}, {19, SHIFT, 324}, },
-  			{{-1, ERROR, 301}, {19, SHIFT, 325}, },
-  			{{-1, REDUCE, 142}, },
-  			{{-1, REDUCE, 227}, },
-  			{{-1, REDUCE, 212}, {14, SHIFT, 326}, },
-  			{{-1, ERROR, 305}, {20, SHIFT, 328}, },
-  			{{-1, ERROR, 306}, {33, SHIFT, 304}, },
-  			{{-1, REDUCE, 195}, },
-  			{{-1, REDUCE, 206}, {14, SHIFT, 312}, },
-  			{{-1, ERROR, 309}, {19, SHIFT, 331}, },
-  			{{-1, REDUCE, 202}, {29, SHIFT, 332}, },
-  			{{-1, ERROR, 311}, {33, SHIFT, 335}, },
-  			{{-1, ERROR, 312}, {33, SHIFT, 336}, },
-  			{{-1, REDUCE, 199}, },
-  			{{-1, REDUCE, 198}, {14, SHIFT, 312}, },
-  			{{-1, REDUCE, 192}, },
-  			{{-1, REDUCE, 260}, },
-  			{{-1, REDUCE, 226}, },
-  			{{-1, REDUCE, 238}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 231}, },
-  			{{-1, REDUCE, 235}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 288}, {33, SHIFT, 142}, },
-  			{{-1, REDUCE, 267}, },
-  			{{-1, REDUCE, 233}, {28, SHIFT, 320}, },
-  			{{-1, REDUCE, 127}, },
-  			{{-1, REDUCE, 168}, },
-  			{{-1, REDUCE, 169}, },
-  			{{-1, ERROR, 326}, {33, SHIFT, 340}, },
-  			{{-1, REDUCE, 213}, },
-  			{{-1, ERROR, 328}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {21, SHIFT, 341}, {33, SHIFT, 275}, },
-  			{{-1, ERROR, 329}, {20, SHIFT, 344}, },
-  			{{-1, REDUCE, 208}, },
-  			{{-1, REDUCE, 196}, },
-  			{{-1, ERROR, 332}, {10, SHIFT, 306}, {12, SHIFT, 138}, {13, SHIFT, 139}, {33, SHIFT, 308}, },
-  			{{-1, REDUCE, 261}, },
-  			{{-1, REDUCE, 203}, {29, SHIFT, 332}, },
-  			{{-1, REDUCE, 207}, {14, SHIFT, 312}, },
-  			{{-1, REDUCE, 211}, },
-  			{{-1, REDUCE, 200}, },
-  			{{-1, REDUCE, 234}, },
-  			{{-1, REDUCE, 268}, },
-  			{{-1, REDUCE, 214}, },
-  			{{-1, REDUCE, 193}, },
-  			{{-1, REDUCE, 215}, {29, SHIFT, 348}, },
-  			{{-1, ERROR, 343}, {21, SHIFT, 351}, },
-  			{{-1, ERROR, 344}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {21, SHIFT, 352}, {33, SHIFT, 275}, },
-  			{{-1, REDUCE, 210}, },
-  			{{-1, REDUCE, 262}, },
-  			{{-1, REDUCE, 209}, },
-  			{{-1, ERROR, 348}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {33, SHIFT, 275}, },
-  			{{-1, REDUCE, 263}, },
-  			{{-1, REDUCE, 216}, {29, SHIFT, 348}, },
-  			{{-1, REDUCE, 194}, },
-  			{{-1, REDUCE, 204}, },
-  			{{-1, ERROR, 353}, {21, SHIFT, 356}, },
-  			{{-1, REDUCE, 217}, },
-  			{{-1, REDUCE, 264}, },
-  			{{-1, REDUCE, 205}, },
-          };*/
-  private static int[][][] gotoTable;
-  /*      {
-  			{{-1, 8}, },
-  			{{-1, 9}, },
-  			{{-1, 17}, },
-  			{{-1, 56}, {57, 112}, },
-  			{{-1, 10}, {9, 33}, },
-  			{{-1, 21}, {22, 63}, },
-  			{{-1, 11}, {9, 34}, {10, 39}, {33, 75}, },
-  			{{-1, 19}, {28, 69}, },
-  			{{-1, 59}, {60, 114}, },
-  			{{-1, 12}, {9, 35}, {10, 40}, {11, 44}, {33, 76}, {34, 80}, {39, 90}, {75, 156}, },
-  			{{-1, 25}, {27, 67}, },
-  			{{-1, 26}, },
-  			{{-1, 132}, {134, 208}, {206, 208}, },
-  			{{-1, 133}, {203, 264}, },
-  			{{-1, 13}, {9, 36}, {10, 41}, {11, 45}, {12, 48}, {33, 77}, {34, 81}, {35, 84}, {39, 91}, {40, 94}, {44, 100}, {75, 157}, {76, 160}, {80, 166}, {90, 176}, {156, 236}, },
-  			{{-1, 211}, {212, 269}, },
-  			{{-1, 122}, {65, 135}, {116, 193}, {136, 212}, {210, 266}, },
-  			{{-1, 196}, {197, 263}, },
-  			{{-1, 123}, {195, 262}, },
-  			{{-1, 124}, {128, 202}, },
-  			{{-1, 125}, {115, 191}, {259, 300}, },
-  			{{-1, 126}, {115, 192}, {260, 301}, },
-  			{{-1, 127}, },
-  			{{-1, 201}, {142, 218}, {226, 283}, {228, 285}, {284, 317}, },
-  			{{-1, 259}, },
-  			{{-1, 14}, {9, 37}, {10, 42}, {11, 46}, {12, 49}, {13, 51}, {33, 78}, {34, 82}, {35, 85}, {36, 87}, {39, 92}, {40, 95}, {41, 97}, {44, 101}, {45, 103}, {48, 106}, {75, 158}, {76, 161}, {77, 163}, {80, 167}, {81, 169}, {84, 172}, {90, 177}, {91, 179}, {94, 182}, {100, 186}, {156, 237}, {157, 239}, {160, 242}, {166, 246}, {176, 251}, {236, 293}, },
-  			{{-1, 30}, {31, 73}, },
-  			{{-1, 72}, },
-  			{{-1, 143}, {152, 233}, },
-  			{{-1, 221}, {222, 281}, },
-  			{{-1, 144}, {220, 280}, },
-  			{{-1, 145}, {146, 224}, {150, 229}, {225, 282}, },
-  			{{-1, 342}, {216, 276}, {278, 316}, {348, 354}, },
-  			{{-1, 309}, },
-  			{{-1, 310}, {332, 345}, },
-  			{{-1, 333}, {334, 346}, },
-  			{{-1, 313}, {308, 330}, {314, 337}, {335, 347}, },
-  			{{-1, 305}, {306, 329}, },
-  			{{-1, 327}, },
-  			{{-1, 343}, {344, 353}, },
-  			{{-1, 349}, {350, 355}, },
-  			{{-1, 146}, {234, 289}, {320, 289}, },
-  			{{-1, 147}, {150, 230}, {225, 230}, {232, 230}, {292, 230}, {318, 230}, },
-  			{{-1, 148}, },
-  			{{-1, 149}, {148, 227}, {216, 277}, {273, 311}, {278, 277}, {328, 277}, {332, 311}, {344, 277}, {348, 277}, },
-  			{{-1, 15}, {9, 38}, {10, 43}, {11, 47}, {12, 50}, {13, 52}, {14, 53}, {33, 79}, {34, 83}, {35, 86}, {36, 88}, {37, 89}, {39, 93}, {40, 96}, {41, 98}, {42, 99}, {44, 102}, {45, 104}, {46, 105}, {48, 107}, {49, 108}, {51, 109}, {75, 159}, {76, 162}, {77, 164}, {78, 165}, {80, 168}, {81, 170}, {82, 171}, {84, 173}, {85, 174}, {87, 175}, {90, 178}, {91, 180}, {92, 181}, {94, 183}, {95, 184}, {97, 185}, {100, 187}, {101, 188}, {103, 189}, {106, 190}, {156, 238}, {157, 240}, {158, 241}, {160, 243}, {161, 244}, {163, 245}, {166, 247}, {167, 248}, {169, 249}, {172, 250}, {176, 252}, {177, 253}, {179, 254}, {182, 255}, {186, 256}, {236, 294}, {237, 295}, {239, 296}, {242, 297}, {246, 298}, {251, 299}, {293, 323}, },
-  			{{-1, 154}, {155, 235}, },
-  			{{-1, 290}, },
-  			{{-1, 321}, {322, 339}, },
-  			{{-1, 291}, {320, 338}, },
-  			{{-1, 57}, },
-  			{{-1, 22}, },
-  			{{-1, 60}, },
-  			{{-1, 27}, },
-  			{{-1, 134}, {133, 206}, },
-  			{{-1, 197}, },
-  			{{-1, 128}, },
-  			{{-1, 31}, },
-  			{{-1, 150}, {146, 225}, {151, 232}, {234, 292}, {289, 318}, {320, 292}, },
-  			{{-1, 222}, },
-  			{{-1, 278}, },
-  			{{-1, 334}, },
-  			{{-1, 350}, },
-  			{{-1, 155}, },
-  			{{-1, 322}, },
-          };*/
-  private static String[] errorMessages;
-  /*      {
-  			"expecting: 'Package', 'States', 'Helpers', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
-  			"expecting: pkg id",
-  			"expecting: id",
-  			"expecting: '{', id",
-  			"expecting: 'Tokens'",
-  			"expecting: 'Syntax'",
-  			"expecting: EOF",
-  			"expecting: 'States', 'Helpers', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
-  			"expecting: 'States', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
-  			"expecting: 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
-  			"expecting: 'Ignored', 'Productions', 'Abstract', EOF",
-  			"expecting: 'Productions', 'Abstract', EOF",
-  			"expecting: 'Abstract', EOF",
-  			"expecting: '.', ';'",
-  			"expecting: ';', ','",
-  			"expecting: ';'",
-  			"expecting: '='",
-  			"expecting: 'States', 'Tokens', 'Ignored', 'Productions', 'Abstract', id, EOF",
-  			"expecting: 'Ignored', 'Productions', 'Abstract', '{', id, EOF",
-  			"expecting: ';', id",
-  			"expecting: '=', '{'",
-  			"expecting: 'Abstract', id, EOF",
-  			"expecting: 'Tree'",
-  			"expecting: ';', '[', '(', '|', id, char, dec char, hex char, string",
-  			"expecting: '}', ',', '->'",
-  			"expecting: ';', '[', '(', '|', '/', id, char, dec char, hex char, string",
-  			"expecting: 'T', 'P', ';', '[', '{', '|', id",
-  			"expecting: '->'",
-  			"expecting: '[', '(', id, char, dec char, hex char, string",
-  			"expecting: '[', '(', ')', '|', id, char, dec char, hex char, string",
-  			"expecting: ';', '[', ']', '(', ')', '+', '-', '?', '*', '|', '/', id, char, dec char, hex char, string",
-  			"expecting: '..', ';', '[', ']', '(', ')', '+', '-', '?', '*', '|', '/', id, char, dec char, hex char, string",
-  			"expecting: ';', ')', '|', '/'",
-  			"expecting: ';', '[', '(', ')', '|', '/', id, char, dec char, hex char, string",
-  			"expecting: ';', '[', '(', ')', '+', '?', '*', '|', '/', id, char, dec char, hex char, string",
-  			"expecting: ';', '[', ']', '(', ')', '+', '?', '*', '|', '/', id, char, dec char, hex char, string",
-  			"expecting: '}', ','",
-  			"expecting: ';', '/'",
-  			"expecting: '.'",
-  			"expecting: '->', id",
-  			"expecting: 'T', 'P', ';', '[', '{', '}', '+', '?', '*', '|', id",
-  			"expecting: ';', '|'",
-  			"expecting: 'T', 'P', ';', '[', '{', '}', '|', id",
-  			"expecting: 'T', 'P', id",
-  			"expecting: 'T', 'P', '[', '}', id",
-  			"expecting: id, EOF",
-  			"expecting: '+', '-'",
-  			"expecting: '..', '+', '-'",
-  			"expecting: ')'",
-  			"expecting: 'T', 'P', ';', '[', '(', ')', '{', '}', '|', '/', id, char, dec char, hex char, string",
-  			"expecting: ']'",
-  			"expecting: 'New', 'Null', 'T', 'P', '[', '}', id",
-  			"expecting: '}'",
-  			"expecting: char, dec char, hex char",
-  			"expecting: ':'",
-  			"expecting: 'New', 'Null', 'T', 'P', '[', ')', '}', ',', id",
-  			"expecting: 'New', 'T', 'P', ']', id",
-  			"expecting: 'New', 'Null', 'T', 'P', '.', '[', ')', '}', ',', id",
-  			"expecting: 'T', 'P', ';', '[', '|', id",
-  			"expecting: '.', '('",
-  			"expecting: '('",
-  			"expecting: '.', ']', ','",
-  			"expecting: ']', ','",
-  			"expecting: 'New', 'Null', 'T', 'P', '[', ')', id",
-  			"expecting: 'New', 'T', 'P', id",
-  			"expecting: 'New', 'Null', 'T', 'P', '[', ']', ')', '}', ',', id",
-  			"expecting: ')', ','",
-  			"expecting: 'New', 'Null', 'T', 'P', '[', id",
-          };*/
-  private static int[] errors;
-  /*      {
-  			0, 1, 2, 2, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11, 12, 6, 13, 7, 14, 15, 16, 17, 17, 2, 16, 18, 2, 18, 19, 20, 21, 21, 22, 8, 9, 10, 11, 12, 6, 9, 10, 11, 12, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 1, 7, 13, 13, 2, 14, 14, 9, 23, 17, 24, 25, 16, 18, 11, 15, 26, 27, 16, 21, 2, 9, 10, 11, 12, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 13, 7, 13, 14, 14, 28, 29, 30, 31, 31, 31, 30, 15, 32, 33, 34, 35, 30, 33, 2, 2, 2, 36, 36, 36, 37, 25, 11, 38, 38, 2, 39, 40, 15, 41, 41, 26, 42, 43, 2, 26, 44, 26, 16, 45, 45, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 12, 6, 6, 6, 6, 46, 47, 48, 17, 33, 32, 32, 49, 49, 49, 33, 33, 24, 36, 2, 36, 2, 36, 18, 23, 15, 37, 2, 2, 50, 51, 52, 42, 21, 26, 41, 41, 27, 41, 26, 40, 2, 40, 41, 42, 16, 44, 15, 26, 45, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 12, 6, 6, 6, 6, 12, 6, 6, 6, 6, 6, 28, 28, 28, 53, 30, 32, 32, 36, 2, 15, 18, 18, 15, 54, 2, 55, 56, 41, 57, 51, 2, 51, 26, 41, 41, 41, 42, 40, 42, 16, 21, 2, 58, 15, 41, 58, 12, 6, 6, 6, 6, 6, 6, 50, 50, 18, 43, 59, 60, 2, 55, 61, 50, 62, 2, 2, 55, 57, 41, 51, 42, 58, 45, 26, 41, 41, 6, 30, 30, 2, 60, 63, 60, 62, 55, 64, 62, 62, 61, 65, 55, 41, 41, 60, 55, 66, 48, 63, 62, 62, 62, 67, 66, 66, 55, 62, 48, 66, 66, 62, 
-          };*/
-
-  static
-  {
-    try
-    {
-      DataInputStream s = new DataInputStream(
-                            new BufferedInputStream(
-                              Parser.class.getResourceAsStream("parser.dat")));
-
-      // read actionTable
-      int length = s.readInt();
-      actionTable = new int[length][][];
-      for(int i = 0; i < actionTable.length; i++)
-      {
-        length = s.readInt();
-        actionTable[i] = new int[length][3];
-        for(int j = 0; j < actionTable[i].length; j++)
-        {
-          for(int k = 0; k < 3; k++)
-          {
-            actionTable[i][j][k] = s.readInt();
-          }
-        }
-      }
-
-      // read gotoTable
-      length = s.readInt();
-      gotoTable = new int[length][][];
-      for(int i = 0; i < gotoTable.length; i++)
-      {
-        length = s.readInt();
-        gotoTable[i] = new int[length][2];
-        for(int j = 0; j < gotoTable[i].length; j++)
-        {
-          for(int k = 0; k < 2; k++)
-          {
-            gotoTable[i][j][k] = s.readInt();
-          }
-        }
-      }
-
-      // read errorMessages
-      length = s.readInt();
-      errorMessages = new String[length];
-      for(int i = 0; i < errorMessages.length; i++)
-      {
-        length = s.readInt();
-        StringBuffer buffer = new StringBuffer();
-
-        for(int j = 0; j < length; j++)
-        {
-          buffer.append(s.readChar());
-        }
-        errorMessages[i] = buffer.toString();
-      }
-
-      // read errors
-      length = s.readInt();
-      errors = new int[length];
-      for(int i = 0; i < errors.length; i++)
-      {
-        errors[i] = s.readInt();
-      }
-
-      s.close();
-    }
-    catch(Exception e)
-    {
-      throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted.");
-    }
-  }
+        ArrayList nodeArrayList2 = pop();
+        ArrayList nodeArrayList1 = pop();
+        LinkedList listNode3 = new LinkedList();
+        {
+            // Block
+        LinkedList listNode1 = new LinkedList();
+        PAstAlt pastaltNode2;
+        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        pastaltNode2 = (PAstAlt)nodeArrayList2.get(0);
+        if(listNode1 != null) //Macro:ParserTypedLinkedListAddAll
+        {
+            if(addElementsToNewList){
+                listNode3.addAll(listNode1);
+            }else{
+                listNode3 = listNode1;
+            }
+        }
+        if(pastaltNode2 != null)
+        {
+            listNode3.add(pastaltNode2);
+        }
+        }
+        nodeList.add(listNode3);
+        // return nodeList;
+        final ArrayList containerList = nodeList;
+        Object elementToCheck = containerList.get(0);
+        checkResult(elementToCheck);
+
+        return containerList;
+    }
+
+
+    private static int[][][] actionTable;
+/*      {
+			{{-1, REDUCE, 0}, {1, SHIFT, 1}, {2, SHIFT, 2}, {3, SHIFT, 3}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, ERROR, 1}, {0, SHIFT, 16}, },
+			{{-1, ERROR, 2}, {33, SHIFT, 18}, },
+			{{-1, ERROR, 3}, {33, SHIFT, 20}, },
+			{{-1, ERROR, 4}, {22, SHIFT, 23}, {33, SHIFT, 24}, },
+			{{-1, ERROR, 5}, {4, SHIFT, 28}, },
+			{{-1, ERROR, 6}, {33, SHIFT, 29}, },
+			{{-1, ERROR, 7}, {8, SHIFT, 32}, },
+			{{-1, ERROR, 8}, {38, ACCEPT, -1}, },
+			{{-1, REDUCE, 1}, {2, SHIFT, 2}, {3, SHIFT, 3}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 2}, {2, SHIFT, 2}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 4}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 8}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 16}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 32}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 64}, },
+			{{-1, ERROR, 16}, {14, SHIFT, 54}, {16, SHIFT, 55}, },
+			{{-1, REDUCE, 128}, },
+			{{-1, REDUCE, 135}, {29, SHIFT, 58}, },
+			{{-1, ERROR, 19}, {16, SHIFT, 61}, },
+			{{-1, ERROR, 20}, {17, SHIFT, 62}, },
+			{{-1, REDUCE, 241}, },
+			{{-1, REDUCE, 132}, {33, SHIFT, 20}, },
+			{{-1, ERROR, 23}, {33, SHIFT, 64}, },
+			{{-1, ERROR, 24}, {17, SHIFT, 65}, },
+			{{-1, REDUCE, 245}, },
+			{{-1, ERROR, 26}, {33, SHIFT, 66}, },
+			{{-1, REDUCE, 138}, {22, SHIFT, 23}, {33, SHIFT, 24}, },
+			{{-1, ERROR, 28}, {16, SHIFT, 68}, {33, SHIFT, 18}, },
+			{{-1, ERROR, 29}, {17, SHIFT, 70}, {22, SHIFT, 71}, },
+			{{-1, REDUCE, 253}, },
+			{{-1, REDUCE, 175}, {33, SHIFT, 29}, },
+			{{-1, ERROR, 32}, {9, SHIFT, 74}, },
+			{{-1, REDUCE, 3}, {2, SHIFT, 2}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 5}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 9}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 17}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 33}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 65}, },
+			{{-1, REDUCE, 6}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 10}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 18}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 34}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 66}, },
+			{{-1, REDUCE, 12}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 20}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 36}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 68}, },
+			{{-1, REDUCE, 24}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 40}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 72}, },
+			{{-1, REDUCE, 48}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 80}, },
+			{{-1, REDUCE, 96}, },
+			{{-1, ERROR, 54}, {0, SHIFT, 110}, },
+			{{-1, REDUCE, 129}, },
+			{{-1, REDUCE, 239}, },
+			{{-1, ERROR, 57}, {14, SHIFT, 54}, {16, SHIFT, 111}, },
+			{{-1, ERROR, 58}, {33, SHIFT, 113}, },
+			{{-1, REDUCE, 243}, },
+			{{-1, REDUCE, 136}, {29, SHIFT, 58}, },
+			{{-1, REDUCE, 134}, },
+			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, REDUCE, 242}, },
+			{{-1, ERROR, 64}, {23, SHIFT, 129}, {29, SHIFT, 130}, {31, SHIFT, 131}, },
+			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, ERROR, 66}, {17, SHIFT, 136}, },
+			{{-1, REDUCE, 246}, },
+			{{-1, REDUCE, 150}, },
+			{{-1, ERROR, 69}, {16, SHIFT, 137}, },
+			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
+			{{-1, ERROR, 71}, {31, SHIFT, 151}, },
+			{{-1, ERROR, 72}, {17, SHIFT, 152}, },
+			{{-1, REDUCE, 254}, },
+			{{-1, ERROR, 74}, {33, SHIFT, 153}, },
+			{{-1, REDUCE, 7}, {4, SHIFT, 4}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 11}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 19}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 35}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 67}, },
+			{{-1, REDUCE, 13}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 21}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 37}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 69}, },
+			{{-1, REDUCE, 25}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 41}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 73}, },
+			{{-1, REDUCE, 49}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 81}, },
+			{{-1, REDUCE, 97}, },
+			{{-1, REDUCE, 14}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 22}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 38}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 70}, },
+			{{-1, REDUCE, 26}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 42}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 74}, },
+			{{-1, REDUCE, 50}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 82}, },
+			{{-1, REDUCE, 98}, },
+			{{-1, REDUCE, 28}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 44}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 76}, },
+			{{-1, REDUCE, 52}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 84}, },
+			{{-1, REDUCE, 100}, },
+			{{-1, REDUCE, 56}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 88}, },
+			{{-1, REDUCE, 104}, },
+			{{-1, REDUCE, 112}, },
+			{{-1, REDUCE, 131}, },
+			{{-1, REDUCE, 130}, },
+			{{-1, REDUCE, 240}, },
+			{{-1, REDUCE, 137}, },
+			{{-1, REDUCE, 244}, },
+			{{-1, ERROR, 115}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, REDUCE, 163}, },
+			{{-1, REDUCE, 165}, },
+			{{-1, REDUCE, 166}, },
+			{{-1, REDUCE, 167}, },
+			{{-1, REDUCE, 162}, },
+			{{-1, ERROR, 122}, {16, SHIFT, 194}, },
+			{{-1, REDUCE, 153}, {28, SHIFT, 195}, },
+			{{-1, REDUCE, 251}, },
+			{{-1, REDUCE, 158}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+			{{-1, REDUCE, 160}, },
+			{{-1, REDUCE, 161}, },
+			{{-1, REDUCE, 157}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, REDUCE, 143}, },
+			{{-1, ERROR, 130}, {33, SHIFT, 203}, },
+			{{-1, ERROR, 131}, {33, SHIFT, 204}, },
+			{{-1, REDUCE, 247}, },
+			{{-1, ERROR, 133}, {23, SHIFT, 205}, {29, SHIFT, 130}, },
+			{{-1, ERROR, 134}, {23, SHIFT, 207}, {29, SHIFT, 130}, },
+			{{-1, ERROR, 135}, {16, SHIFT, 209}, {30, SHIFT, 210}, },
+			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, REDUCE, 151}, },
+			{{-1, ERROR, 138}, {14, SHIFT, 213}, },
+			{{-1, ERROR, 139}, {14, SHIFT, 214}, },
+			{{-1, ERROR, 140}, {33, SHIFT, 215}, },
+			{{-1, ERROR, 141}, {31, SHIFT, 216}, {33, SHIFT, 217}, },
+			{{-1, REDUCE, 219}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+			{{-1, ERROR, 143}, {16, SHIFT, 219}, },
+			{{-1, REDUCE, 180}, {28, SHIFT, 220}, },
+			{{-1, REDUCE, 187}, },
+			{{-1, REDUCE, 184}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 255}, },
+			{{-1, ERROR, 148}, {12, SHIFT, 138}, {13, SHIFT, 139}, {33, SHIFT, 226}, },
+			{{-1, ERROR, 149}, {33, SHIFT, 228}, },
+			{{-1, REDUCE, 185}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
+			{{-1, ERROR, 151}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {23, SHIFT, 231}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
+			{{-1, ERROR, 153}, {17, SHIFT, 234}, },
+			{{-1, REDUCE, 265}, },
+			{{-1, REDUCE, 230}, {33, SHIFT, 153}, },
+			{{-1, REDUCE, 15}, {5, SHIFT, 5}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 23}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 39}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 71}, },
+			{{-1, REDUCE, 27}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 43}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 75}, },
+			{{-1, REDUCE, 51}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 83}, },
+			{{-1, REDUCE, 99}, },
+			{{-1, REDUCE, 29}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 45}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 77}, },
+			{{-1, REDUCE, 53}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 85}, },
+			{{-1, REDUCE, 101}, },
+			{{-1, REDUCE, 57}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 89}, },
+			{{-1, REDUCE, 105}, },
+			{{-1, REDUCE, 113}, },
+			{{-1, REDUCE, 30}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 46}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 78}, },
+			{{-1, REDUCE, 54}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 86}, },
+			{{-1, REDUCE, 102}, },
+			{{-1, REDUCE, 58}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 90}, },
+			{{-1, REDUCE, 106}, },
+			{{-1, REDUCE, 114}, },
+			{{-1, REDUCE, 60}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 92}, },
+			{{-1, REDUCE, 108}, },
+			{{-1, REDUCE, 116}, },
+			{{-1, REDUCE, 120}, },
+			{{-1, ERROR, 191}, {24, SHIFT, 257}, {25, SHIFT, 258}, },
+			{{-1, REDUCE, 160}, {15, SHIFT, 260}, },
+			{{-1, ERROR, 193}, {21, SHIFT, 261}, },
+			{{-1, REDUCE, 133}, },
+			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, REDUCE, 249}, },
+			{{-1, REDUCE, 154}, {28, SHIFT, 195}, },
+			{{-1, REDUCE, 172}, },
+			{{-1, REDUCE, 171}, },
+			{{-1, REDUCE, 170}, },
+			{{-1, REDUCE, 159}, },
+			{{-1, REDUCE, 252}, },
+			{{-1, REDUCE, 147}, {31, SHIFT, 131}, },
+			{{-1, REDUCE, 149}, },
+			{{-1, REDUCE, 144}, },
+			{{-1, ERROR, 206}, {23, SHIFT, 265}, {29, SHIFT, 130}, },
+			{{-1, REDUCE, 145}, },
+			{{-1, REDUCE, 248}, },
+			{{-1, REDUCE, 139}, },
+			{{-1, REDUCE, 156}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, ERROR, 211}, {16, SHIFT, 267}, },
+			{{-1, ERROR, 212}, {16, SHIFT, 268}, {30, SHIFT, 210}, },
+			{{-1, REDUCE, 228}, },
+			{{-1, REDUCE, 229}, },
+			{{-1, ERROR, 215}, {19, SHIFT, 270}, },
+			{{-1, ERROR, 216}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {23, SHIFT, 274}, {33, SHIFT, 275}, },
+			{{-1, ERROR, 217}, {23, SHIFT, 279}, },
+			{{-1, REDUCE, 223}, },
+			{{-1, REDUCE, 176}, },
+			{{-1, REDUCE, 183}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 141}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 257}, },
+			{{-1, REDUCE, 181}, {28, SHIFT, 220}, },
+			{{-1, ERROR, 223}, {31, SHIFT, 216}, },
+			{{-1, REDUCE, 188}, },
+			{{-1, REDUCE, 186}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 223}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 220}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+			{{-1, ERROR, 227}, {33, SHIFT, 284}, },
+			{{-1, REDUCE, 221}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+			{{-1, REDUCE, 189}, },
+			{{-1, REDUCE, 256}, },
+			{{-1, REDUCE, 178}, },
+			{{-1, ERROR, 232}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {23, SHIFT, 286}, {33, SHIFT, 142}, },
+			{{-1, ERROR, 233}, {16, SHIFT, 287}, },
+			{{-1, REDUCE, 235}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 288}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 266}, },
+			{{-1, REDUCE, 31}, {6, SHIFT, 6}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 47}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 79}, },
+			{{-1, REDUCE, 55}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 87}, },
+			{{-1, REDUCE, 103}, },
+			{{-1, REDUCE, 59}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 91}, },
+			{{-1, REDUCE, 107}, },
+			{{-1, REDUCE, 115}, },
+			{{-1, REDUCE, 61}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 93}, },
+			{{-1, REDUCE, 109}, },
+			{{-1, REDUCE, 117}, },
+			{{-1, REDUCE, 121}, },
+			{{-1, REDUCE, 62}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 94}, },
+			{{-1, REDUCE, 110}, },
+			{{-1, REDUCE, 118}, },
+			{{-1, REDUCE, 122}, },
+			{{-1, REDUCE, 124}, },
+			{{-1, REDUCE, 173}, },
+			{{-1, REDUCE, 174}, },
+			{{-1, ERROR, 259}, {18, SHIFT, 115}, {20, SHIFT, 116}, {33, SHIFT, 117}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, {37, SHIFT, 121}, },
+			{{-1, ERROR, 260}, {34, SHIFT, 118}, {35, SHIFT, 119}, {36, SHIFT, 120}, },
+			{{-1, REDUCE, 164}, },
+			{{-1, REDUCE, 155}, },
+			{{-1, REDUCE, 250}, },
+			{{-1, REDUCE, 148}, },
+			{{-1, REDUCE, 146}, },
+			{{-1, REDUCE, 152}, },
+			{{-1, REDUCE, 141}, },
+			{{-1, REDUCE, 140}, },
+			{{-1, ERROR, 269}, {16, SHIFT, 302}, },
+			{{-1, ERROR, 270}, {32, SHIFT, 303}, },
+			{{-1, ERROR, 271}, {33, SHIFT, 304}, },
+			{{-1, REDUCE, 201}, },
+			{{-1, ERROR, 273}, {10, SHIFT, 306}, {12, SHIFT, 138}, {13, SHIFT, 139}, {19, SHIFT, 307}, {33, SHIFT, 308}, },
+			{{-1, REDUCE, 191}, },
+			{{-1, REDUCE, 197}, {14, SHIFT, 312}, },
+			{{-1, REDUCE, 259}, },
+			{{-1, ERROR, 277}, {33, SHIFT, 314}, },
+			{{-1, ERROR, 278}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {23, SHIFT, 315}, {33, SHIFT, 275}, },
+			{{-1, REDUCE, 218}, },
+			{{-1, REDUCE, 182}, },
+			{{-1, REDUCE, 258}, },
+			{{-1, REDUCE, 190}, },
+			{{-1, REDUCE, 224}, },
+			{{-1, REDUCE, 222}, {24, SHIFT, 198}, {26, SHIFT, 199}, {27, SHIFT, 200}, },
+			{{-1, REDUCE, 225}, },
+			{{-1, REDUCE, 179}, },
+			{{-1, REDUCE, 177}, },
+			{{-1, ERROR, 288}, {33, SHIFT, 217}, },
+			{{-1, REDUCE, 236}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
+			{{-1, ERROR, 290}, {16, SHIFT, 319}, },
+			{{-1, REDUCE, 232}, {28, SHIFT, 320}, },
+			{{-1, REDUCE, 237}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 63}, {7, SHIFT, 7}, },
+			{{-1, REDUCE, 95}, },
+			{{-1, REDUCE, 111}, },
+			{{-1, REDUCE, 119}, },
+			{{-1, REDUCE, 123}, },
+			{{-1, REDUCE, 125}, },
+			{{-1, REDUCE, 126}, },
+			{{-1, ERROR, 300}, {19, SHIFT, 324}, },
+			{{-1, ERROR, 301}, {19, SHIFT, 325}, },
+			{{-1, REDUCE, 142}, },
+			{{-1, REDUCE, 227}, },
+			{{-1, REDUCE, 212}, {14, SHIFT, 326}, },
+			{{-1, ERROR, 305}, {20, SHIFT, 328}, },
+			{{-1, ERROR, 306}, {33, SHIFT, 304}, },
+			{{-1, REDUCE, 195}, },
+			{{-1, REDUCE, 206}, {14, SHIFT, 312}, },
+			{{-1, ERROR, 309}, {19, SHIFT, 331}, },
+			{{-1, REDUCE, 202}, {29, SHIFT, 332}, },
+			{{-1, ERROR, 311}, {33, SHIFT, 335}, },
+			{{-1, ERROR, 312}, {33, SHIFT, 336}, },
+			{{-1, REDUCE, 199}, },
+			{{-1, REDUCE, 198}, {14, SHIFT, 312}, },
+			{{-1, REDUCE, 192}, },
+			{{-1, REDUCE, 260}, },
+			{{-1, REDUCE, 226}, },
+			{{-1, REDUCE, 238}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 231}, },
+			{{-1, REDUCE, 235}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 140}, {22, SHIFT, 288}, {33, SHIFT, 142}, },
+			{{-1, REDUCE, 267}, },
+			{{-1, REDUCE, 233}, {28, SHIFT, 320}, },
+			{{-1, REDUCE, 127}, },
+			{{-1, REDUCE, 168}, },
+			{{-1, REDUCE, 169}, },
+			{{-1, ERROR, 326}, {33, SHIFT, 340}, },
+			{{-1, REDUCE, 213}, },
+			{{-1, ERROR, 328}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {21, SHIFT, 341}, {33, SHIFT, 275}, },
+			{{-1, ERROR, 329}, {20, SHIFT, 344}, },
+			{{-1, REDUCE, 208}, },
+			{{-1, REDUCE, 196}, },
+			{{-1, ERROR, 332}, {10, SHIFT, 306}, {12, SHIFT, 138}, {13, SHIFT, 139}, {33, SHIFT, 308}, },
+			{{-1, REDUCE, 261}, },
+			{{-1, REDUCE, 203}, {29, SHIFT, 332}, },
+			{{-1, REDUCE, 207}, {14, SHIFT, 312}, },
+			{{-1, REDUCE, 211}, },
+			{{-1, REDUCE, 200}, },
+			{{-1, REDUCE, 234}, },
+			{{-1, REDUCE, 268}, },
+			{{-1, REDUCE, 214}, },
+			{{-1, REDUCE, 193}, },
+			{{-1, REDUCE, 215}, {29, SHIFT, 348}, },
+			{{-1, ERROR, 343}, {21, SHIFT, 351}, },
+			{{-1, ERROR, 344}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {21, SHIFT, 352}, {33, SHIFT, 275}, },
+			{{-1, REDUCE, 210}, },
+			{{-1, REDUCE, 262}, },
+			{{-1, REDUCE, 209}, },
+			{{-1, ERROR, 348}, {10, SHIFT, 271}, {11, SHIFT, 272}, {12, SHIFT, 138}, {13, SHIFT, 139}, {18, SHIFT, 273}, {33, SHIFT, 275}, },
+			{{-1, REDUCE, 263}, },
+			{{-1, REDUCE, 216}, {29, SHIFT, 348}, },
+			{{-1, REDUCE, 194}, },
+			{{-1, REDUCE, 204}, },
+			{{-1, ERROR, 353}, {21, SHIFT, 356}, },
+			{{-1, REDUCE, 217}, },
+			{{-1, REDUCE, 264}, },
+			{{-1, REDUCE, 205}, },
+        };*/
+    private static int[][][] gotoTable;
+/*      {
+			{{-1, 8}, },
+			{{-1, 9}, },
+			{{-1, 17}, },
+			{{-1, 56}, {57, 112}, },
+			{{-1, 10}, {9, 33}, },
+			{{-1, 21}, {22, 63}, },
+			{{-1, 11}, {9, 34}, {10, 39}, {33, 75}, },
+			{{-1, 19}, {28, 69}, },
+			{{-1, 59}, {60, 114}, },
+			{{-1, 12}, {9, 35}, {10, 40}, {11, 44}, {33, 76}, {34, 80}, {39, 90}, {75, 156}, },
+			{{-1, 25}, {27, 67}, },
+			{{-1, 26}, },
+			{{-1, 132}, {134, 208}, {206, 208}, },
+			{{-1, 133}, {203, 264}, },
+			{{-1, 13}, {9, 36}, {10, 41}, {11, 45}, {12, 48}, {33, 77}, {34, 81}, {35, 84}, {39, 91}, {40, 94}, {44, 100}, {75, 157}, {76, 160}, {80, 166}, {90, 176}, {156, 236}, },
+			{{-1, 211}, {212, 269}, },
+			{{-1, 122}, {65, 135}, {116, 193}, {136, 212}, {210, 266}, },
+			{{-1, 196}, {197, 263}, },
+			{{-1, 123}, {195, 262}, },
+			{{-1, 124}, {128, 202}, },
+			{{-1, 125}, {115, 191}, {259, 300}, },
+			{{-1, 126}, {115, 192}, {260, 301}, },
+			{{-1, 127}, },
+			{{-1, 201}, {142, 218}, {226, 283}, {228, 285}, {284, 317}, },
+			{{-1, 259}, },
+			{{-1, 14}, {9, 37}, {10, 42}, {11, 46}, {12, 49}, {13, 51}, {33, 78}, {34, 82}, {35, 85}, {36, 87}, {39, 92}, {40, 95}, {41, 97}, {44, 101}, {45, 103}, {48, 106}, {75, 158}, {76, 161}, {77, 163}, {80, 167}, {81, 169}, {84, 172}, {90, 177}, {91, 179}, {94, 182}, {100, 186}, {156, 237}, {157, 239}, {160, 242}, {166, 246}, {176, 251}, {236, 293}, },
+			{{-1, 30}, {31, 73}, },
+			{{-1, 72}, },
+			{{-1, 143}, {152, 233}, },
+			{{-1, 221}, {222, 281}, },
+			{{-1, 144}, {220, 280}, },
+			{{-1, 145}, {146, 224}, {150, 229}, {225, 282}, },
+			{{-1, 342}, {216, 276}, {278, 316}, {348, 354}, },
+			{{-1, 309}, },
+			{{-1, 310}, {332, 345}, },
+			{{-1, 333}, {334, 346}, },
+			{{-1, 313}, {308, 330}, {314, 337}, {335, 347}, },
+			{{-1, 305}, {306, 329}, },
+			{{-1, 327}, },
+			{{-1, 343}, {344, 353}, },
+			{{-1, 349}, {350, 355}, },
+			{{-1, 146}, {234, 289}, {320, 289}, },
+			{{-1, 147}, {150, 230}, {225, 230}, {232, 230}, {292, 230}, {318, 230}, },
+			{{-1, 148}, },
+			{{-1, 149}, {148, 227}, {216, 277}, {273, 311}, {278, 277}, {328, 277}, {332, 311}, {344, 277}, {348, 277}, },
+			{{-1, 15}, {9, 38}, {10, 43}, {11, 47}, {12, 50}, {13, 52}, {14, 53}, {33, 79}, {34, 83}, {35, 86}, {36, 88}, {37, 89}, {39, 93}, {40, 96}, {41, 98}, {42, 99}, {44, 102}, {45, 104}, {46, 105}, {48, 107}, {49, 108}, {51, 109}, {75, 159}, {76, 162}, {77, 164}, {78, 165}, {80, 168}, {81, 170}, {82, 171}, {84, 173}, {85, 174}, {87, 175}, {90, 178}, {91, 180}, {92, 181}, {94, 183}, {95, 184}, {97, 185}, {100, 187}, {101, 188}, {103, 189}, {106, 190}, {156, 238}, {157, 240}, {158, 241}, {160, 243}, {161, 244}, {163, 245}, {166, 247}, {167, 248}, {169, 249}, {172, 250}, {176, 252}, {177, 253}, {179, 254}, {182, 255}, {186, 256}, {236, 294}, {237, 295}, {239, 296}, {242, 297}, {246, 298}, {251, 299}, {293, 323}, },
+			{{-1, 154}, {155, 235}, },
+			{{-1, 290}, },
+			{{-1, 321}, {322, 339}, },
+			{{-1, 291}, {320, 338}, },
+			{{-1, 57}, },
+			{{-1, 22}, },
+			{{-1, 60}, },
+			{{-1, 27}, },
+			{{-1, 134}, {133, 206}, },
+			{{-1, 197}, },
+			{{-1, 128}, },
+			{{-1, 31}, },
+			{{-1, 150}, {146, 225}, {151, 232}, {234, 292}, {289, 318}, {320, 292}, },
+			{{-1, 222}, },
+			{{-1, 278}, },
+			{{-1, 334}, },
+			{{-1, 350}, },
+			{{-1, 155}, },
+			{{-1, 322}, },
+        };*/
+    protected static String[] errorMessages;
+/*      {
+			"expecting: 'Package', 'States', 'Helpers', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+			"expecting: pkg id",
+			"expecting: id",
+			"expecting: '{', id",
+			"expecting: 'Tokens'",
+			"expecting: 'Syntax'",
+			"expecting: EOF",
+			"expecting: 'States', 'Helpers', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+			"expecting: 'States', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+			"expecting: 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
+			"expecting: 'Ignored', 'Productions', 'Abstract', EOF",
+			"expecting: 'Productions', 'Abstract', EOF",
+			"expecting: 'Abstract', EOF",
+			"expecting: '.', ';'",
+			"expecting: ';', ','",
+			"expecting: ';'",
+			"expecting: '='",
+			"expecting: 'States', 'Tokens', 'Ignored', 'Productions', 'Abstract', id, EOF",
+			"expecting: 'Ignored', 'Productions', 'Abstract', '{', id, EOF",
+			"expecting: ';', id",
+			"expecting: '=', '{'",
+			"expecting: 'Abstract', id, EOF",
+			"expecting: 'Tree'",
+			"expecting: ';', '[', '(', '|', id, char, dec char, hex char, string",
+			"expecting: '}', ',', '->'",
+			"expecting: ';', '[', '(', '|', '/', id, char, dec char, hex char, string",
+			"expecting: 'T', 'P', ';', '[', '{', '|', id",
+			"expecting: '->'",
+			"expecting: '[', '(', id, char, dec char, hex char, string",
+			"expecting: '[', '(', ')', '|', id, char, dec char, hex char, string",
+			"expecting: ';', '[', ']', '(', ')', '+', '-', '?', '*', '|', '/', id, char, dec char, hex char, string",
+			"expecting: '..', ';', '[', ']', '(', ')', '+', '-', '?', '*', '|', '/', id, char, dec char, hex char, string",
+			"expecting: ';', ')', '|', '/'",
+			"expecting: ';', '[', '(', ')', '|', '/', id, char, dec char, hex char, string",
+			"expecting: ';', '[', '(', ')', '+', '?', '*', '|', '/', id, char, dec char, hex char, string",
+			"expecting: ';', '[', ']', '(', ')', '+', '?', '*', '|', '/', id, char, dec char, hex char, string",
+			"expecting: '}', ','",
+			"expecting: ';', '/'",
+			"expecting: '.'",
+			"expecting: '->', id",
+			"expecting: 'T', 'P', ';', '[', '{', '}', '+', '?', '*', '|', id",
+			"expecting: ';', '|'",
+			"expecting: 'T', 'P', ';', '[', '{', '}', '|', id",
+			"expecting: 'T', 'P', id",
+			"expecting: 'T', 'P', '[', '}', id",
+			"expecting: id, EOF",
+			"expecting: '+', '-'",
+			"expecting: '..', '+', '-'",
+			"expecting: ')'",
+			"expecting: 'T', 'P', ';', '[', '(', ')', '{', '}', '|', '/', id, char, dec char, hex char, string",
+			"expecting: ']'",
+			"expecting: 'New', 'Null', 'T', 'P', '[', '}', id",
+			"expecting: '}'",
+			"expecting: char, dec char, hex char",
+			"expecting: ':'",
+			"expecting: 'New', 'Null', 'T', 'P', '[', ')', '}', ',', id",
+			"expecting: 'New', 'T', 'P', ']', id",
+			"expecting: 'New', 'Null', 'T', 'P', '.', '[', ')', '}', ',', id",
+			"expecting: 'T', 'P', ';', '[', '|', id",
+			"expecting: '.', '('",
+			"expecting: '('",
+			"expecting: '.', ']', ','",
+			"expecting: ']', ','",
+			"expecting: 'New', 'Null', 'T', 'P', '[', ')', id",
+			"expecting: 'New', 'T', 'P', id",
+			"expecting: 'New', 'Null', 'T', 'P', '[', ']', ')', '}', ',', id",
+			"expecting: ')', ','",
+			"expecting: 'New', 'Null', 'T', 'P', '[', id",
+        };*/
+    private static int[] errors;
+/*      {
+			0, 1, 2, 2, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11, 12, 6, 13, 7, 14, 15, 16, 17, 17, 2, 16, 18, 2, 18, 19, 20, 21, 21, 22, 8, 9, 10, 11, 12, 6, 9, 10, 11, 12, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 1, 7, 13, 13, 2, 14, 14, 9, 23, 17, 24, 25, 16, 18, 11, 15, 26, 27, 16, 21, 2, 9, 10, 11, 12, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 13, 7, 13, 14, 14, 28, 29, 30, 31, 31, 31, 30, 15, 32, 33, 34, 35, 30, 33, 2, 2, 2, 36, 36, 36, 37, 25, 11, 38, 38, 2, 39, 40, 15, 41, 41, 26, 42, 43, 2, 26, 44, 26, 16, 45, 45, 10, 11, 12, 6, 11, 12, 6, 12, 6, 6, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 12, 6, 6, 6, 6, 46, 47, 48, 17, 33, 32, 32, 49, 49, 49, 33, 33, 24, 36, 2, 36, 2, 36, 18, 23, 15, 37, 2, 2, 50, 51, 52, 42, 21, 26, 41, 41, 27, 41, 26, 40, 2, 40, 41, 42, 16, 44, 15, 26, 45, 11, 12, 6, 12, 6, 6, 12, 6, 6, 6, 12, 6, 6, 6, 6, 12, 6, 6, 6, 6, 6, 28, 28, 28, 53, 30, 32, 32, 36, 2, 15, 18, 18, 15, 54, 2, 55, 56, 41, 57, 51, 2, 51, 26, 41, 41, 41, 42, 40, 42, 16, 21, 2, 58, 15, 41, 58, 12, 6, 6, 6, 6, 6, 6, 50, 50, 18, 43, 59, 60, 2, 55, 61, 50, 62, 2, 2, 55, 57, 41, 51, 42, 58, 45, 26, 41, 41, 6, 30, 30, 2, 60, 63, 60, 62, 55, 64, 62, 62, 61, 65, 55, 41, 41, 60, 55, 66, 48, 63, 62, 62, 62, 67, 66, 66, 55, 62, 48, 66, 66, 62, 
+        };*/
+
+    static
+    {
+        try
+        {
+            DataInputStream s = new DataInputStream(
+                new BufferedInputStream(
+                Parser.class.getResourceAsStream("parser.dat")));
+
+            // read actionTable
+            int length = s.readInt();
+            Parser.actionTable = new int[length][][];
+            for(int i = 0; i < Parser.actionTable.length; i++)
+            {
+                length = s.readInt();
+                Parser.actionTable[i] = new int[length][3];
+                for(int j = 0; j < Parser.actionTable[i].length; j++)
+                {
+                for(int k = 0; k < 3; k++)
+                {
+                    Parser.actionTable[i][j][k] = s.readInt();
+                }
+                }
+            }
+
+            // read gotoTable
+            length = s.readInt();
+            gotoTable = new int[length][][];
+            for(int i = 0; i < gotoTable.length; i++)
+            {
+                length = s.readInt();
+                gotoTable[i] = new int[length][2];
+                for(int j = 0; j < gotoTable[i].length; j++)
+                {
+                for(int k = 0; k < 2; k++)
+                {
+                    gotoTable[i][j][k] = s.readInt();
+                }
+                }
+            }
+
+            // read errorMessages
+            length = s.readInt();
+            errorMessages = new String[length];
+            for(int i = 0; i < errorMessages.length; i++)
+            {
+                length = s.readInt();
+                StringBuffer buffer = new StringBuffer();
+
+                for(int j = 0; j < length; j++)
+                {
+                buffer.append(s.readChar());
+                }
+                errorMessages[i] = buffer.toString();
+            }
+
+            // read errors
+            length = s.readInt();
+            errors = new int[length];
+            for(int i = 0; i < errors.length; i++)
+            {
+                errors[i] = s.readInt();
+            }
+
+            s.close();
+        }
+        catch(Exception e)
+        {
+            throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted.");
+        }
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/parser/ParserException.java b/src/main/java/org/sablecc/sablecc/parser/ParserException.java
index da9525f3f358b2a190eaf50061eab78ed50437dd..100b09786f54bf5576b7cda0add9306243a2eb17 100644
--- a/src/main/java/org/sablecc/sablecc/parser/ParserException.java
+++ b/src/main/java/org/sablecc/sablecc/parser/ParserException.java
@@ -4,18 +4,32 @@ package org.sablecc.sablecc.parser;
 
 import org.sablecc.sablecc.node.*;
 
+@SuppressWarnings("serial")
 public class ParserException extends Exception
 {
-  Token token;
+    Token token;
+    String realMsg;
 
-  public ParserException(Token token, String  message)
-  {
-    super(message);
-    this.token = token;
-  }
+    public ParserException(  Token token, String  message)
+    {
+        super(message);
+        this.token = token;
+    }
 
-  public Token getToken()
-  {
-    return token;
-  }
+    public ParserException(  Token token, String prefix, String  message)
+    {
+        super(prefix+message);
+        this.realMsg = message;
+        this.token = token;
+    }
+
+    public Token getToken()
+    {
+        return this.token;
+    }
+
+    public String getRealMsg()
+    {
+        return this.realMsg;
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/parser/State.java b/src/main/java/org/sablecc/sablecc/parser/State.java
index 1807f8ca36e358e81dc214363c0c20aa2829ff7e..9eb1f8f97be80c3af03e16e3cc767aa8f8dfa82b 100644
--- a/src/main/java/org/sablecc/sablecc/parser/State.java
+++ b/src/main/java/org/sablecc/sablecc/parser/State.java
@@ -4,14 +4,15 @@ package org.sablecc.sablecc.parser;
 
 import java.util.ArrayList;
 
+@SuppressWarnings("rawtypes")
 final class State
 {
-  int state;
-  ArrayList nodes;
+    int state;
+    ArrayList nodes;
 
-  State(int state, ArrayList nodes)
-  {
-    this.state = state;
-    this.nodes = nodes;
-  }
+    State(  int state,   ArrayList nodes)
+    {
+        this.state = state;
+        this.nodes = nodes;
+    }
 }
diff --git a/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java b/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java
index 088f9486c7db1359716e764f9741f8e50af16d88..7cfec0b4c2b6e2e119c176a6ce4d5aac2ddabed5 100644
--- a/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java
+++ b/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java
@@ -7,200 +7,239 @@ import org.sablecc.sablecc.analysis.*;
 
 class TokenIndex extends AnalysisAdapter
 {
-  int index;
-
-  public void caseTPkgId(TPkgId node)
-  {
-    index = 0;
-  }
-
-  public void caseTPackage(TPackage node)
-  {
-    index = 1;
-  }
-
-  public void caseTStates(TStates node)
-  {
-    index = 2;
-  }
-
-  public void caseTHelpers(THelpers node)
-  {
-    index = 3;
-  }
-
-  public void caseTTokens(TTokens node)
-  {
-    index = 4;
-  }
-
-  public void caseTIgnored(TIgnored node)
-  {
-    index = 5;
-  }
-
-  public void caseTProductions(TProductions node)
-  {
-    index = 6;
-  }
-
-  public void caseTAbstract(TAbstract node)
-  {
-    index = 7;
-  }
-
-  public void caseTSyntax(TSyntax node)
-  {
-    index = 8;
-  }
-
-  public void caseTTree(TTree node)
-  {
-    index = 9;
-  }
-
-  public void caseTNew(TNew node)
-  {
-    index = 10;
-  }
-
-  public void caseTNull(TNull node)
-  {
-    index = 11;
-  }
-
-  public void caseTTokenSpecifier(TTokenSpecifier node)
-  {
-    index = 12;
-  }
-
-  public void caseTProductionSpecifier(TProductionSpecifier node)
-  {
-    index = 13;
-  }
-
-  public void caseTDot(TDot node)
-  {
-    index = 14;
-  }
-
-  public void caseTDDot(TDDot node)
-  {
-    index = 15;
-  }
-
-  public void caseTSemicolon(TSemicolon node)
-  {
-    index = 16;
-  }
-
-  public void caseTEqual(TEqual node)
-  {
-    index = 17;
-  }
-
-  public void caseTLBkt(TLBkt node)
-  {
-    index = 18;
-  }
-
-  public void caseTRBkt(TRBkt node)
-  {
-    index = 19;
-  }
-
-  public void caseTLPar(TLPar node)
-  {
-    index = 20;
-  }
-
-  public void caseTRPar(TRPar node)
-  {
-    index = 21;
-  }
-
-  public void caseTLBrace(TLBrace node)
-  {
-    index = 22;
-  }
-
-  public void caseTRBrace(TRBrace node)
-  {
-    index = 23;
-  }
-
-  public void caseTPlus(TPlus node)
-  {
-    index = 24;
-  }
-
-  public void caseTMinus(TMinus node)
-  {
-    index = 25;
-  }
-
-  public void caseTQMark(TQMark node)
-  {
-    index = 26;
-  }
-
-  public void caseTStar(TStar node)
-  {
-    index = 27;
-  }
-
-  public void caseTBar(TBar node)
-  {
-    index = 28;
-  }
-
-  public void caseTComma(TComma node)
-  {
-    index = 29;
-  }
-
-  public void caseTSlash(TSlash node)
-  {
-    index = 30;
-  }
-
-  public void caseTArrow(TArrow node)
-  {
-    index = 31;
-  }
-
-  public void caseTColon(TColon node)
-  {
-    index = 32;
-  }
-
-  public void caseTId(TId node)
-  {
-    index = 33;
-  }
-
-  public void caseTChar(TChar node)
-  {
-    index = 34;
-  }
-
-  public void caseTDecChar(TDecChar node)
-  {
-    index = 35;
-  }
-
-  public void caseTHexChar(THexChar node)
-  {
-    index = 36;
-  }
-
-  public void caseTString(TString node)
-  {
-    index = 37;
-  }
-
-  public void caseEOF(EOF node)
-  {
-    index = 38;
-  }
+    int index;
+
+    @Override
+    public void caseTPkgId(  TPkgId node)
+    {
+        this.index = 0;
+    }
+
+    @Override
+    public void caseTPackage(  TPackage node)
+    {
+        this.index = 1;
+    }
+
+    @Override
+    public void caseTStates(  TStates node)
+    {
+        this.index = 2;
+    }
+
+    @Override
+    public void caseTHelpers(  THelpers node)
+    {
+        this.index = 3;
+    }
+
+    @Override
+    public void caseTTokens(  TTokens node)
+    {
+        this.index = 4;
+    }
+
+    @Override
+    public void caseTIgnored(  TIgnored node)
+    {
+        this.index = 5;
+    }
+
+    @Override
+    public void caseTProductions(  TProductions node)
+    {
+        this.index = 6;
+    }
+
+    @Override
+    public void caseTAbstract(  TAbstract node)
+    {
+        this.index = 7;
+    }
+
+    @Override
+    public void caseTSyntax(  TSyntax node)
+    {
+        this.index = 8;
+    }
+
+    @Override
+    public void caseTTree(  TTree node)
+    {
+        this.index = 9;
+    }
+
+    @Override
+    public void caseTNew(  TNew node)
+    {
+        this.index = 10;
+    }
+
+    @Override
+    public void caseTNull(  TNull node)
+    {
+        this.index = 11;
+    }
+
+    @Override
+    public void caseTTokenSpecifier(  TTokenSpecifier node)
+    {
+        this.index = 12;
+    }
+
+    @Override
+    public void caseTProductionSpecifier(  TProductionSpecifier node)
+    {
+        this.index = 13;
+    }
+
+    @Override
+    public void caseTDot(  TDot node)
+    {
+        this.index = 14;
+    }
+
+    @Override
+    public void caseTDDot(  TDDot node)
+    {
+        this.index = 15;
+    }
+
+    @Override
+    public void caseTSemicolon(  TSemicolon node)
+    {
+        this.index = 16;
+    }
+
+    @Override
+    public void caseTEqual(  TEqual node)
+    {
+        this.index = 17;
+    }
+
+    @Override
+    public void caseTLBkt(  TLBkt node)
+    {
+        this.index = 18;
+    }
+
+    @Override
+    public void caseTRBkt(  TRBkt node)
+    {
+        this.index = 19;
+    }
+
+    @Override
+    public void caseTLPar(  TLPar node)
+    {
+        this.index = 20;
+    }
+
+    @Override
+    public void caseTRPar(  TRPar node)
+    {
+        this.index = 21;
+    }
+
+    @Override
+    public void caseTLBrace(  TLBrace node)
+    {
+        this.index = 22;
+    }
+
+    @Override
+    public void caseTRBrace(  TRBrace node)
+    {
+        this.index = 23;
+    }
+
+    @Override
+    public void caseTPlus(  TPlus node)
+    {
+        this.index = 24;
+    }
+
+    @Override
+    public void caseTMinus(  TMinus node)
+    {
+        this.index = 25;
+    }
+
+    @Override
+    public void caseTQMark(  TQMark node)
+    {
+        this.index = 26;
+    }
+
+    @Override
+    public void caseTStar(  TStar node)
+    {
+        this.index = 27;
+    }
+
+    @Override
+    public void caseTBar(  TBar node)
+    {
+        this.index = 28;
+    }
+
+    @Override
+    public void caseTComma(  TComma node)
+    {
+        this.index = 29;
+    }
+
+    @Override
+    public void caseTSlash(  TSlash node)
+    {
+        this.index = 30;
+    }
+
+    @Override
+    public void caseTArrow(  TArrow node)
+    {
+        this.index = 31;
+    }
+
+    @Override
+    public void caseTColon(  TColon node)
+    {
+        this.index = 32;
+    }
+
+    @Override
+    public void caseTId(  TId node)
+    {
+        this.index = 33;
+    }
+
+    @Override
+    public void caseTChar(  TChar node)
+    {
+        this.index = 34;
+    }
+
+    @Override
+    public void caseTDecChar(  TDecChar node)
+    {
+        this.index = 35;
+    }
+
+    @Override
+    public void caseTHexChar(  THexChar node)
+    {
+        this.index = 36;
+    }
+
+    @Override
+    public void caseTString(  TString node)
+    {
+        this.index = 37;
+    }
+
+    @Override
+    public void caseEOF(  EOF node)
+    {
+        this.index = 38;
+    }
 }