diff --git a/build.gradle b/build.gradle
index 3c44cc91ff71ae41f89028dde206c8d3bb83150a..8a0996581182a1bac810646d36af127a1a12638a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ apply plugin: 'signing'
 
 allprojects {
   project.group = 'de.hhu.stups'
-  project.version = '3.5.0'
+  project.version = '3.6.0'
   project.ext.isSnapshot = project.version.endsWith("-SNAPSHOT")
 
   ext."signing.secretKeyRingFile" = rootProject.file("secring.gpg").absolutePath
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java
index ba7e1bd73d5055549766b479c5f3f579965ee220..30fc88bc9238fbea629848b6333aca20b9ed4d23 100644
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java
+++ b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java
@@ -6,14 +6,4 @@
 
 package de.hhu.stups.sablecc.patch;
 
-import java.util.Map;
-
-
-public interface IParser {
-  /**
-   * @deprecated All generated token classes store their own position info.
-   *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
-   */
-  @Deprecated
-  public Map<PositionedNode, SourcecodeRange> getMapping();
-}
+public interface IParser {}
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/ITokenListContainer.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/ITokenListContainer.java
deleted file mode 100644
index eb07fe5602f8b75df630419a334952d13cc5cf0d..0000000000000000000000000000000000000000
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/ITokenListContainer.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, 
- * Heinrich Heine Universitaet Duesseldorf
- * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) 
- * */
-
-package de.hhu.stups.sablecc.patch;
-
-import java.util.List;
-
-/**
- * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
- *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
- */
-@Deprecated
-public interface ITokenListContainer {
-  /**
-   * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
-   *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
-   */
-  @Deprecated
-  public List<IToken> getTokenList();
-}
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcePositions.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcePositions.java
deleted file mode 100644
index 7dc66fd2e9d77ca876b9fc7a2454656f4fecac34..0000000000000000000000000000000000000000
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcePositions.java
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen,
- * Heinrich Heine Universitaet Duesseldorf
- * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html)
- * */
-
-package de.hhu.stups.sablecc.patch;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @deprecated All generated token classes store their own position info.
- *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
- */
-@Deprecated
-public class SourcePositions {
-  private final List<IToken> tokenList;
-  private final Map<PositionedNode, SourcecodeRange> positions;
-
-  public SourcePositions(final List<IToken> tokenList,
-      final Map<PositionedNode, SourcecodeRange> positions) {
-    this.tokenList = tokenList;
-    this.positions = positions;
-  }
-
-  /**
-   * Returns the {@link SourcecodeRange} of this {@link PositionedNode} or
-   * {@code null} if no {@link SourcecodeRange} is available.
-   *
-   * @param node the node with source code information
-   * @return the source code range of {@code node}
-   */
-  public SourcecodeRange getSourcecodeRange(final PositionedNode node) {
-    return positions.get(node);
-  }
-
-  /**
-   * Returns the line in which this {@link PositionedNode} begins. The value
-   * {@code 0} is returned if no sourcecode range is available for this
-   * {@link PositionedNode}.
-   *
-   * @param node the node with source code information
-   * @return the line where the {@code node} starts
-   */
-  public int getBeginLine(final PositionedNode node) {
-    if (node instanceof IToken) {
-      return ((IToken) node).getLine();
-    }
-
-    return getBeginLine(getSourcecodeRange(node));
-  }
-
-  public int getBeginLine(final SourcecodeRange range) {
-    if (range != null) {
-      return tokenList.get(range.getBeginIndex()).getLine();
-    } else {
-      return 0;
-    }
-  }
-
-  /**
-   * Returns the column of the first character of this {@link PositionedNode},
-   * i.e. the begin column. The value {@code 0} is returned if no
-   * sourcecode range is available for this {@link PositionedNode}.
-   *
-   * @param node the node with source code information
-   * @return the begin column of {@code node}
-   */
-  public int getBeginColumn(final PositionedNode node) {
-    if (node instanceof IToken) {
-      return ((IToken) node).getPos();
-    }
-
-    return getBeginColumn(getSourcecodeRange(node));
-  }
-
-  public int getBeginColumn(final SourcecodeRange range) {
-    if (range != null) {
-      return tokenList.get(range.getBeginIndex()).getPos();
-    } else {
-      return 0;
-    }
-  }
-
-  /**
-   * Returns the line in which the {@link PositionedNode} ends. The value
-   * {@code 0} is returned if no sourcecode range is available for this
-   * {@link PositionedNode}.
-   *
-   * @param node the node with source code information
-   * @return the end line of <code>node</code>
-   */
-  public int getEndLine(final PositionedNode node) {
-    // TODO handle multi line comments
-    /*
-     * if (node instanceof TComment) { final TComment comment = (TComment)
-     * node; return comment.getLine() + countLineBreaks(comment); }
-     */
-
-    if (node instanceof IToken) {
-      return ((IToken) node).getLine();
-    }
-
-    return getEndLine(getSourcecodeRange(node));
-  }
-
-  private int getEndLine(final SourcecodeRange range) {
-    if (range != null) {
-      return tokenList.get(range.getEndIndex()).getLine();
-    } else {
-      return 0;
-    }
-  }
-
-  // private int countLineBreaks(final PositionedNode node) {
-  // final char[] text = getNodeString(node).toCharArray();
-  // int count = 0;
-  //
-  // for (int i = 0; i < text.length; i++) {
-  // if (text[i] == '\n' || text[i] == '\r') {
-  // count++;
-  // }
-  // }
-  //
-  // return count;
-  // }
-
-  /**
-   * Returns the last column of this {@link PositionedNode}, i.e. the column
-   * of the last character of the {@link PositionedNode}. The value
-   * {@code 0} is returned if no sourcecode range is available for this
-   * {@link PositionedNode}.
-   *
-   * @param node the node with source code information
-   * @return the end column of <code>node</code>
-   */
-  public int getEndColumn(final PositionedNode node) {
-    // TODO handle multi line comments
-    /*
-     * if (node instanceof TComment) { return getEndColumn((TComment) node);
-     * }
-     */
-
-    if (node instanceof IToken) {
-      final IToken token = (IToken) node;
-      return token.getPos() + token.getText().length() - 1;
-    }
-
-    return getEndColumn(getSourcecodeRange(node));
-  }
-
-  private int getEndColumn(final SourcecodeRange range) {
-    if (range != null) {
-      final IToken token = tokenList.get(range.getEndIndex());
-      return token.getPos() + token.getText().length() - 1;
-    } else {
-      return 0;
-    }
-  }
-
-  /*
-   * private int getEndColumn(final TComment commentToken) { final String
-   * asString = commentToken.getText(); final StringTokenizer tokenizer = new
-   * StringTokenizer(asString, "\n\r");
-   *
-   * // multi line comment if (tokenizer.countTokens() > 1) { String line =
-   * null; while (tokenizer.hasMoreTokens()) { line = tokenizer.nextToken(); }
-   *
-   * if (line == null) { return 0; }
-   *
-   * return line.length(); } // single line comment else { return
-   * commentToken.getPos() + asString.length(); } }
-   */
-
-  /**
-   * Returns the array of {@link IToken}s belonging to this
-   * {@link PositionedNode}. The array may be empty, if no sourcecode range
-   * can be determined for this {@link PositionedNode}.
-   *
-   * @param node the node with source code information
-   * @return all tokens of {@code node}
-   */
-  public IToken[] getTokens(final PositionedNode node) {
-    if (node instanceof IToken) {
-      return new IToken[] { (IToken) node };
-    }
-
-    final SourcecodeRange range = getSourcecodeRange(node);
-
-    if (range != null) {
-      final int beginIndex = range.getBeginIndex();
-      final int endIndex = range.getEndIndex();
-      final IToken[] result = new IToken[endIndex - beginIndex + 1];
-
-      for (int i = 0; i + beginIndex <= endIndex; i++) {
-        result[i] = tokenList.get(i + beginIndex);
-      }
-
-      return result;
-    } else {
-      return new IToken[0];
-    }
-  }
-
-  public String getNodeString(final PositionedNode node) {
-    // TODO handle comments
-    /*
-     * if (node instanceof TComment) { return ((TComment) node).getText(); }
-     */
-
-    return getRangeString(getSourcecodeRange(node));
-  }
-
-  public String getRangeString(final SourcecodeRange range) {
-    final StringBuilder buffer = new StringBuilder();
-
-    if (range != null) {
-      final int beginIndex = range.getBeginIndex();
-      final int endIndex = range.getEndIndex();
-
-      for (int i = beginIndex; i <= endIndex; i++) {
-        buffer.append(tokenList.get(i).getText());
-      }
-    }
-
-    return buffer.toString();
-  }
-
-  // TODO handle comments
-  /*
-   *
-   * public IToken getCommentBefore(final PositionedNode node) { final
-   * SourcecodeRange range = getSourcecodeRange(node); final int beginIndex =
-   * range.getBeginIndex(); if (beginIndex > 0) { final IToken token =
-   * tokenList.get(beginIndex - 1); if (token instanceof TComment) { return
-   * token; } else { return null; } } else { return null; } }
-   *
-   * public IToken getCommentAfter(final PositionedNode node) { final
-   * SourcecodeRange range = getSourcecodeRange(node); final int endIndex =
-   * range.getEndIndex(); if (endIndex < tokenList.size() - 1) { final IToken
-   * token = tokenList.get(endIndex + 1); if (token instanceof TComment) {
-   * return token; } else { return null; } } else { return null; } } public
-   * IToken[] getIncludedComments(final PositionedNode node) { final
-   * SourcecodeRange range = getSourcecodeRange(node);
-   *
-   * if (range != null) { final int beginIndex = range.getBeginIndex(); final
-   * int endIndex = range.getEndIndex(); final List<IToken> comments = new
-   * ArrayList<IToken>();
-   *
-   * for (int i = 0; i + beginIndex <= endIndex; i++) { final IToken token =
-   * tokenList.get(i + beginIndex); if (token instanceof TComment) {
-   * comments.add(token); } }
-   *
-   * return comments.toArray(new IToken[comments.size()]); } else { return new
-   * IToken[0]; } }
-   */
-
-  public List<IToken> getTokenList() {
-    return tokenList;
-  }
-
-  public void replaceMapping(final PositionedNode origNode,
-      final PositionedNode newNode) {
-    final SourcecodeRange sourcecodeRange = positions.remove(origNode);
-
-    if (sourcecodeRange != null) {
-      positions.put(newNode, sourcecodeRange);
-    }
-  }
-
-  public PositionedNode getSurroundingNode(final int index) {
-    if (index < 0 || index >= tokenList.size()) {
-      return null;
-    }
-
-    PositionedNode bestNode = null;
-    int bestBeginIndex = 0;
-    int bestEndIndex = tokenList.size() - 1;
-
-    // TODO find better solution than searching all?
-    for (final Iterator<PositionedNode> iterator = positions.keySet()
-        .iterator(); iterator.hasNext();) {
-      final PositionedNode node = iterator.next();
-      final SourcecodeRange range = positions.get(node);
-
-      final int beginIndex = range.getBeginIndex();
-      final int endIndex = range.getEndIndex();
-
-      if (beginIndex <= index && endIndex >= index
-          && beginIndex >= bestBeginIndex && endIndex <= bestEndIndex) {
-        bestNode = node;
-        bestBeginIndex = beginIndex;
-        bestEndIndex = endIndex;
-      }
-    }
-
-    return bestNode;
-  }
-
-  /**
-   * <p>
-   * Finds the index of the token that belongs to the position.
-   * </p>
-   * <p>
-   * If no token list is available {@code -1} is returned. For
-   * {@code line < 0} the index {@code 0} is returned. If
-   * {@code line >= 1 && column < 0} the line number is returned.
-   * </p>
-   * <p>
-   * If the line matches but the requested column is beyond the max. length of
-   * the line, the last token of this line is returned. The last token of all
-   * tokens (EOF) is chosen if the requested positions is beyond the
-   * absolutely last token.
-   * </p>
-   * <p>
-   * <b>Attention</b>: Line and column counting starts at 1!
-   * </p>
-   *
-   * @param line
-   *            line of the position
-   * @param column
-   *            column of the position
-   * @return Index in {@link #tokenList}
-   */
-  public int getTokenforPosition(final int line, final int column) {
-    // Sort out nonsense input
-    if (tokenList.size() == 0) {
-      return -1;
-    }
-    if (line < 1) {
-      return 0;
-    }
-    if (column < 1) {
-      return line;
-    }
-
-    /*
-     * Shortcut for special case: Position beyond last token
-     */
-    final IToken lastToken = tokenList.get(tokenList.size() - 1);
-    if (line > lastToken.getLine()
-        || (line == lastToken.getLine() && column > lastToken.getPos()
-            + lastToken.getText().length())) {
-      return tokenList.size() - 1;
-    }
-
-    int result = -1;
-    int left = 0;
-    int right = tokenList.size() - 1;
-
-    while (left <= right && result < 0) {
-      if (left != right) {
-        final int currentIndex = left + (right - left) / 2;
-
-        final int lineDiff = line
-            - tokenList.get(currentIndex).getLine();
-
-        if (lineDiff > 0) {
-          // continue in right half
-          left = Math.min(currentIndex + 1, right);
-        } else if (lineDiff < 0) {
-          // continue in left half
-          right = Math.max(currentIndex - 1, left);
-        } else {
-          // we are in the correct line now, switch to linear search
-          IToken token = tokenList.get(currentIndex);
-          result = currentIndex;
-
-          final int compare = compareTokenColumn(token, column);
-
-          // move left
-          if (compare < 0) {
-            while (compareTokenColumn(token, column) < 0) {
-              result--;
-
-              if (result < 0) {
-                break;
-              }
-
-              token = tokenList.get(result);
-            }
-          }
-          // move right
-          else if (compare > 0) {
-            while (compareTokenColumn(token, column) > 0) {
-              result++;
-
-              if (result > tokenList.size() - 1) {
-                result = tokenList.size() - 1;
-                break;
-              }
-
-              token = tokenList.get(result);
-
-              /*
-               * Only move as long as line end is not reached.
-               * This happens when queried for column beyond max
-               * column of this line. Then we return the index of
-               * the last token in this line.
-               */
-              if (token.getLine() > line) {
-                result--;
-                break;
-              }
-            }
-          }
-        }
-      } else {
-        result = left;
-      }
-    }
-
-    return result;
-  }
-
-  /**
-   * Compares the token position (within line only) with the column.
-   *
-   * @return {@code -1} if {@code column < beginColumn},
-   *         {@code 1} if {@code endColumn < column} or
-   *         {@code 0} if the column is within the range of the token.
-   */
-  private int compareTokenColumn(final IToken token, final int column) {
-    final int beginColumn = token.getPos();
-    final int endColumn = beginColumn + token.getText().length() - 1;
-
-    if (column < beginColumn) {
-      return -1;
-    } else if (endColumn < column) {
-      return 1;
-    } else {
-      return 0;
-    }
-  }
-}
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcecodeRange.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcecodeRange.java
deleted file mode 100644
index f447a79ece3d80c995d1201fb0a12d45c860e87f..0000000000000000000000000000000000000000
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcecodeRange.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, 
- * Heinrich Heine Universitaet Duesseldorf
- * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) 
- * */
-
-package de.hhu.stups.sablecc.patch;
-
-@Deprecated
-public class SourcecodeRange {
-  private final int beginIndex;
-  private final int endIndex;
-
-  public SourcecodeRange(final int beginIndex, final int endIndex) {
-    this.beginIndex = beginIndex;
-    this.endIndex = endIndex;
-  }
-
-  public int getBeginIndex() {
-    return beginIndex;
-  }
-
-  public int getEndIndex() {
-    return endIndex;
-  }
-
-  @Override
-  public String toString() {
-    return "(" + beginIndex + "/" + endIndex + ")";
-  }
-}
diff --git a/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java b/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java
index 51fd2d0d44d193bc4542205410e50b31f8fa6770..4a7690495d7e8ce414cda13db24e70689e65d5b1 100644
--- a/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java
@@ -16,9 +16,10 @@ import org.sablecc.sablecc.node.*;
 public class AltTransformAdapter extends DepthFirstAdapter
 {
   ResolveAltIds altIds;
+  ResolveTransformIds transformIds;
   String currentNewAltName;
 
-  private Map<String, String> isElementIsAlist;
+  private Map<String, AElem> isElementIsAlist;
 
   private List<Node> listSimpleTermTransform;
   private Map<Node, String> simpleTermTransform;
@@ -27,11 +28,14 @@ public class AltTransformAdapter extends DepthFirstAdapter
   AltTransformAdapter(Map<Node, String> simpleTermTransform,
                       List<Node> listSimpleTermTransform,
                       String currentNewAltName,
-                      ResolveAltIds altIds, Map<String, String> isElementIsAlist,
+                      ResolveAltIds altIds,
+                      ResolveTransformIds transformIds,
+                      Map<String, AElem> isElementIsAlist,
                       Map<Node, String> simpleTermOrsimpleListTermTypes)
   {
     this.currentNewAltName = currentNewAltName;
     this.altIds = altIds;
+    this.transformIds = transformIds;
     this.isElementIsAlist = isElementIsAlist;
     this.listSimpleTermTransform = listSimpleTermTransform;
     this.simpleTermTransform = simpleTermTransform;
@@ -49,7 +53,8 @@ public class AltTransformAdapter extends DepthFirstAdapter
       node.replaceBy( new ANullTerm() );
     }
 
-    if( isElementIsAlist.get(currentNewAltName+name) != null )
+    AElem elemNode = isElementIsAlist.get(currentNewAltName + name);
+    if(elemNode != null)
     {
       TId simpleTermTail;
       if(node.getSimpleTermTail() != null)
@@ -58,7 +63,7 @@ public class AltTransformAdapter extends DepthFirstAdapter
       }
       else
       {
-        simpleTermTail = new TId(isElementIsAlist.get(currentNewAltName+name));
+        simpleTermTail = elemNode.getId().clone();
       }
 
       ASimpleTerm asimpleTerm = new ASimpleTerm( node.getSpecifier(), node.getId(), simpleTermTail);
@@ -69,7 +74,16 @@ public class AltTransformAdapter extends DepthFirstAdapter
       }
 
       node.replaceBy(asimpleTerm);
-      simpleTermTransform.put(asimpleTerm, "L"+ResolveIds.name(isElementIsAlist.get(currentNewAltName+name)) );
+      String untransformedElementType = altIds.ids.elemTypes.get(elemNode);
+      String key = untransformedElementType + "." + simpleTermTail.getText();
+      String elementType = transformIds.getProdTransformIds().prodTransformElemTypesString.get(key);
+      if(elementType == null)
+      {
+        // This should only happen for plain token types
+        assert untransformedElementType.startsWith("T");
+        elementType = untransformedElementType;
+      }
+      simpleTermTransform.put(asimpleTerm, "L" + elementType);
 
       //Terms are added here only if they were implicitely transformed
       listSimpleTermTransform.add( asimpleTerm );
@@ -87,7 +101,8 @@ public class AltTransformAdapter extends DepthFirstAdapter
       node.replaceBy( null );
     }
 
-    if( isElementIsAlist.get(currentNewAltName+name) != null)
+    AElem elemNode = isElementIsAlist.get(currentNewAltName + name);
+    if(elemNode != null)
     {
       TId simpleTermTail;
       if(node.getSimpleTermTail() != null)
@@ -96,7 +111,7 @@ public class AltTransformAdapter extends DepthFirstAdapter
       }
       else
       {
-        simpleTermTail = new TId(isElementIsAlist.get(currentNewAltName+name));
+        simpleTermTail = elemNode.getId().clone();
       }
 
       TId tid;
@@ -111,7 +126,16 @@ public class AltTransformAdapter extends DepthFirstAdapter
       }
 
       node.replaceBy(asimpleListTerm);
-      simpleTermTransform.put(asimpleListTerm, "L"+ResolveIds.name(isElementIsAlist.get(currentNewAltName+name)));
+      String untransformedElementType = altIds.ids.elemTypes.get(elemNode);
+      String key = untransformedElementType + "." + simpleTermTail.getText();
+      String elementType = transformIds.getProdTransformIds().prodTransformElemTypesString.get(key);
+      if(elementType == null)
+      {
+        // This should only happen for plain token types
+        assert untransformedElementType.startsWith("T");
+        elementType = untransformedElementType;
+      }
+      simpleTermTransform.put(asimpleListTerm, "L" + elementType);
 
       //Terms are added here only if they were implicitely transformed
       listSimpleTermTransform.add( asimpleListTerm );
diff --git a/src/main/java/org/sablecc/sablecc/GenLexer.java b/src/main/java/org/sablecc/sablecc/GenLexer.java
index 03f2e07418149e0cb8520354d93427c675bce1be..2a428a63c8ae5816f04b2f17d467c637b26e0ff7 100644
--- a/src/main/java/org/sablecc/sablecc/GenLexer.java
+++ b/src/main/java/org/sablecc/sablecc/GenLexer.java
@@ -169,27 +169,7 @@ public class GenLexer extends AnalysisAdapter
         macros.apply(file, "LexerTokenTail", null);
       }
 
-      macros.apply(file, "LexerBody1");
-
-      for(ListIterator<String> i = ids.tokenList.listIterator(); i.hasNext();)
-      {
-        String name = i.next();
-        ATokenDef node = ids.tokens.get(name);
-        boolean fixed = ids.fixedTokens.get(node);
-
-        if(fixed)
-        {
-          macros.apply(file, "LexerNewFixedToken",
-                       new String[] {"" + i.previousIndex(), name});
-        }
-        else
-        {
-          macros.apply(file, "LexerNewVariableToken",
-                       new String[] {"" + i.previousIndex(), name});
-        }
-      }
-
-      macros.apply(file, "LexerBody2");
+      macros.apply(file, "LexerBody");
 
       DataOutputStream out = new DataOutputStream(
                                new BufferedOutputStream(
diff --git a/src/main/java/org/sablecc/sablecc/GenParser.java b/src/main/java/org/sablecc/sablecc/GenParser.java
index 20592f25f0f079a03a58815281950c9aa3c77683..98bcc81d5b59ba2fbad6f9f45743472fa86fe8f6 100644
--- a/src/main/java/org/sablecc/sablecc/GenParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenParser.java
@@ -69,11 +69,6 @@ public class GenParser extends DepthFirstAdapter
   private String firstProductionName;
   private boolean processInlining;
   private boolean prettyPrinting;
-  private boolean grammarHasTransformations;
-
-  // This boolean is used to check weither the filter() method in class Parser.java
-  // should be present or not.
-  private boolean activateFilter = true;
 
   //This tree-walker field generate the code of parsing and construction of the AST.
   GenerateAlternativeCodeForParser aParsedAltAdapter;
@@ -89,15 +84,13 @@ public class GenParser extends DepthFirstAdapter
   private Map<String, Node> alts;
 
   public GenParser(ResolveIds ids, ResolveAltIds altIds, ResolveTransformIds transformIds,
-                   String firstProductionName, boolean processInlining, boolean prettyPrinting,
-                   boolean grammarHasTransformations)
+                   String firstProductionName, boolean processInlining, boolean prettyPrinting)
   {
     this.ids = ids;
     this.altIds = altIds;
     this.transformIds = transformIds;
     this.processInlining = processInlining;
     this.prettyPrinting = prettyPrinting;
-    this.grammarHasTransformations = grammarHasTransformations;
 
     AET = new AlternativeElementTypes(ids);
     CG = new ComputeCGNomenclature(ids, transformIds.getProdTransformIds());
@@ -232,11 +225,6 @@ public class GenParser extends DepthFirstAdapter
       }
       catch(ConflictException ce)
       {
-        if(activateFilter)
-        {
-          activateFilter = false;
-        }
-
         //Here, we are trying to inline the grammar with production imply in the conflict.
         if(processInlining)
         {
@@ -375,37 +363,14 @@ public class GenParser extends DepthFirstAdapter
 
       macros.apply(file, "ParserHeader", new String[] {ids.pkgNameDot});
 
-      if(activateFilter && !grammarHasTransformations)
-      {
-        macros.apply(file, "ParserNoInliningPushHeader");
-        macros.apply(file, "ParserCommon", new String[] {", true", ", false"});
-      }
-      else
-      {
-        macros.apply(file, "ParserInliningPushHeader");
-        macros.apply(file, "ParserCommon", new String[] {"", ""});
-      }
-
       //this loop generates the code for all possible reductions and the type of
       //the node needed to be created at a local point.
       for(int i = 0; i < (productions.length - 1); i++)
       {
-        if(activateFilter && !grammarHasTransformations)
-        {
-          macros.apply(file, "ParserNoInliningReduce", new String[] {
-                         "" + productions[i].index,
-                         "" + productions[i].leftside,
-                         "" + (productions[i].name.startsWith("ANonTerminal$") ||
-                               productions[i].name.startsWith("ATerminal$")),
-                         productions[i].name});
-        }
-        else
-        {
-          macros.apply(file, "ParserInliningReduce", new String[] {
-                         "" + productions[i].index,
-                         "" + productions[i].leftside,
-                         productions[i].name});
-        }
+        macros.apply(file, "ParserParseReduce", new String[] {
+                       "" + productions[i].index,
+                       "" + productions[i].leftside,
+                       productions[i].name});
       }
 
       macros.apply(file, "ParserParseTail", new String[] {firstProductionName});
diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index a2613bdb60eb04deb8716ac8fb1bddb2cabf6541..b7a36e5b1ae96b070f1199be34f8c968dc37eacd 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -64,202 +64,98 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     popCount++;
   }
 
-  @Override
-  public void inAAltTransform(AAltTransform node)
-  {
-    String type_name;
-    int position;
-
-    for(PTerm term : node.getTerms())
+  private String lookupInternalTypeName(Node term) {
+    String name = simpleTermTransformMap.get(term);
+    if(name != null)
     {
-      if(simpleTermTransformMap.get(term) != null)
-      {
-        type_name = simpleTermTransformMap.get(term);
-      }
-      else
-      {
-        type_name = CG.getAltTransformElemTypes().get(term);
-      }
-
-      position = CG.getTermNumbers().get(term);
-
-      try
-      {
-        if(type_name.startsWith("L"))
-        {
-          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
-        }
-        else if(type_name.equals("null"))
-        {
-          // No intermediate variable needed for null arguments
-        }
-        else
-        {
-          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
-        }
-      }
-      catch(IOException e)
-      {
-        throw new RuntimeException("An error occured while writing to " +
-                                   new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-      }
+      return name;
+    }
+    else
+    {
+      return CG.getAltTransformElemTypes().get(term);
     }
   }
 
-  @Override
-  public void outAAltTransform(AAltTransform node)
+  private static String getVariableName(String typeName, int position)
   {
-    String type_name;
-    int position;
-
-    try
+    if("null".equals(typeName))
     {
-      for(PTerm term : node.getTerms())
-      {
-        if(simpleTermTransformMap.get(term) != null)
-        {
-          type_name = simpleTermTransformMap.get(term);
-        }
-        else
-        {
-          type_name = CG.getAltTransformElemTypes().get(term);
-        }
-
-        position = CG.getTermNumbers().get(term);
-
-        if(type_name.startsWith("L"))
-        {
-          type_name = "list";
-        }
-        else if(type_name.equals("null"))
-        {
-          type_name = "null";
-        }
-        else
-        {
-          type_name = type_name.toLowerCase();
-        }
-        macros.apply(file, "ParserNewBodyListAdd", new String[] {type_name, "" + position});
-
-      }
-      if (popCount > 0) {
-        // The nodeArrayList variables are numbered starting at 1, so the first popped variable has the number popCount and not popCount-1.
-        macros.apply(file, "ParserNewCheck", new String[] {String.valueOf(popCount)});
-      }
-      macros.apply(file, "ParserNewTail");
+      return "null";
     }
-    catch(IOException e)
+    else if("Lnull".equals(typeName))
     {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
+      return "Collections.EMPTY_LIST"; // Once we require Java 8, this can be replaced with Collections.emptyList()
+    }
+    else if(typeName.startsWith("L"))
+    {
+      return "listNode" + position;
+    }
+    else
+    {
+      return typeName.toLowerCase() + "Node" + position;
     }
   }
 
-  public void inAParams(List<PTerm> list_param)
+  private String getVariableName(Node term)
   {
-    String type_name;
-    int position;
+    return getVariableName(lookupInternalTypeName(term), CG.getTermNumbers().get(term));
+  }
 
-    for(PTerm term : list_param)
+  private static String variableTypeFromInternalType(String typeName)
+  {
+    if("null".equals(typeName))
+    {
+      throw new IllegalArgumentException("Null values have no variable type");
+    }
+    else if(typeName.startsWith("L"))
     {
-      if(simpleTermTransformMap.get(term) != null)
+      String elementTypeName = typeName.substring(1);
+      if("null".equals(elementTypeName))
       {
-        type_name = simpleTermTransformMap.get(term);
+        throw new IllegalArgumentException("Empty list values have no variable type");
       }
       else
       {
-        type_name = CG.getAltTransformElemTypes().get(term);
-      }
-      position = CG.getTermNumbers().get(term);
-
-      try
-      {
-        if(type_name.startsWith("L"))
-        {
-          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
-        }
-        else if(type_name.equals("null"))
-        {
-          // No intermediate variable needed for null arguments
-        }
-        else
-        {
-          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
-        }
-      }
-      catch(IOException e)
-      {
-        throw new RuntimeException("An error occured while writing to " +
-                                   new File(pkgDir, "Parser.java").getAbsolutePath(), e);
+        return "List<" + elementTypeName + ">";
       }
     }
+    else
+    {
+      return typeName;
+    }
   }
 
   @Override
-  public void inASimpleTerm(ASimpleTerm node)
+  public void outAAltTransform(AAltTransform node)
   {
     try
     {
-      String type_name;
-      if(simpleTermTransformMap.get(node) != null)
+      if(node.getTerms().isEmpty())
       {
-        type_name = simpleTermTransformMap.get(node);
+        macros.apply(file, "ParserNewTailEmpty", null);
       }
       else
       {
-        type_name = CG.getAltTransformElemTypes().get(node);
-      }
-      int position = CG.getTermNumbers().get(node).intValue();
-      String termKey = currentAlt+"."+node.getId().getText();
-      int elemPosition = CTP.elems_position.get(termKey);
-      int positionMap = 0;
+        PTerm firstTerm = node.getTerms().get(0);
+        if (popCount > 0) {
+          // The nodeArrayList variables are numbered starting at 1, so the first popped variable has the number popCount and not popCount-1.
+          macros.apply(file, "ParserNewCheck", new String[] {getVariableName(firstTerm), String.valueOf(popCount)});
+        }
 
-      if(node.getSimpleTermTail() != null )
-      {
-        // FIXME This condition is always false, because listSimpleTermTransform contains ASimpleTerm/ASimpleListTerm and not String! Is it safe to remove this?
-        if( !listSimpleTermTransform.contains(node.getId().getText() ) )
+        if(node.getTerms().size() == 1)
         {
-          String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
-          List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
-          {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
-          }
+          macros.apply(file, "ParserNewTailSingle", new String[] {getVariableName(firstTerm)});
         }
-
-        if(simpleTermOrsimpleListTermTypes.get(node) != null)
+        else
         {
-          String type = simpleTermOrsimpleListTermTypes.get(node);
-          List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          macros.apply(file, "ParserNewTailMultiHead");
+          for(PTerm term : node.getTerms())
           {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+            macros.apply(file, "ParserNewTailMultiElement", new String[] {getVariableName(term)});
           }
+          macros.apply(file, "ParserNewTailMultiTail");
         }
       }
-
-      String type;
-      if(type_name.startsWith("L"))
-      {
-        type_name = "list";
-        type = "LinkedList";
-      }
-      else if(type_name.equals("null"))
-      {
-        type_name = "null";
-        type = "Object";
-      }
-      else
-      {
-        type = type_name;
-      }
-
-      macros.apply(file, "ParserSimpleTerm", new String[]
-                   {
-                     type_name.toLowerCase(), ""+position,
-                     type, ""+elemPosition, ""+positionMap
-                   }
-                  );
     }
     catch(IOException e)
     {
@@ -268,38 +164,25 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
   }
 
-  @Override
-  public void inASimpleListTerm(ASimpleListTerm node)
+  private void generateSimpleTerm(Node node, TId id, TId simpleTermTail)
   {
     try
     {
-      String type_name;
-      if(simpleTermTransformMap.get(node) != null)
-      {
-        type_name = simpleTermTransformMap.get(node);
-      }
-      else
-      {
-        type_name = CG.getAltTransformElemTypes().get(node);
-      }
-
-      String termKey = currentAlt+"."+node.getId().getText();
-      int position = CG.getTermNumbers().get(node);
-
+      String type_name = lookupInternalTypeName(node);
+      String termKey = currentAlt + "." + id.getText();
       int elemPosition = CTP.elems_position.get(termKey);
-
       int positionMap = 0;
 
-      if(node.getSimpleTermTail() != null )
+      if(simpleTermTail != null)
       {
         // FIXME This condition is always false, because listSimpleTermTransform contains ASimpleTerm/ASimpleListTerm and not String! Is it safe to remove this?
-        if( !listSimpleTermTransform.contains(node.getId().getText()) )
+        if(!listSimpleTermTransform.contains(id.getText()))
         {
-          String type = CTP.positionsMap.get( realcurrentAlt+"."+node.getId().getText() );
+          String type = CTP.positionsMap.get(realcurrentAlt + "." + id.getText());
           List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          if(list.indexOf(simpleTermTail.getText()) >= 0)
           {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+            positionMap = list.indexOf(simpleTermTail.getText());
           }
         }
 
@@ -307,33 +190,27 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         {
           String type = simpleTermOrsimpleListTermTypes.get(node);
           List<String> list = transformIds.getProdTransformIds().prod_transforms.get(type);
-          if( list.indexOf( node.getSimpleTermTail().getText() ) >= 0 )
+          if(list.indexOf(simpleTermTail.getText()) >= 0)
           {
-            positionMap = list.indexOf( node.getSimpleTermTail().getText() );
+            positionMap = list.indexOf(simpleTermTail.getText());
           }
         }
       }
 
-      String type;
-      if(type_name.startsWith("L"))
+      if("null".equals(type_name))
       {
-        type_name = "list";
-        type = "LinkedList";
+        throw new RuntimeException("Simple term has null type - this should never happen");
       }
-      else if(type_name.equals("null"))
+      else if("Lnull".equals(type_name))
       {
-        type_name = "null";
-        type = "Object";
-      }
-      else
-      {
-        type = type_name;
+        throw new RuntimeException("Simple term has list type with no element type - this should never happen");
       }
 
       macros.apply(file, "ParserSimpleTerm", new String[]
                    {
-                     type_name.toLowerCase(), ""+position,
-                     type, ""+elemPosition, ""+positionMap
+                     variableTypeFromInternalType(type_name),
+                     getVariableName(node),
+                     ""+elemPosition, ""+positionMap
                    }
                   );
     }
@@ -345,253 +222,147 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   }
 
   @Override
-  public void inANewTerm(ANewTerm node)
+  public void inASimpleTerm(ASimpleTerm node)
   {
-    try
-    {
-      macros.apply(file, "ParserBraceOpening");
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-    inAParams(node.getParams());
+    generateSimpleTerm(node, node.getId(), node.getSimpleTermTail());
   }
 
   @Override
-  public void inANewListTerm(ANewListTerm node)
+  public void inASimpleListTerm(ASimpleListTerm node)
   {
-    try
-    {
-      macros.apply(file, "ParserBraceOpening");
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-    inAParams(node.getParams());
+    generateSimpleTerm(node, node.getId(), node.getSimpleTermTail());
   }
 
   @Override
-  public void inAListTerm(AListTerm node)
+  public void caseAListTerm(AListTerm node)
   {
+    if(node.getListTerms().isEmpty())
+    {
+      // Empty lists are generated inline and don't have a variable.
+      return;
+    }
+
     try
     {
-      macros.apply(file, "ParserBraceOpening");
       for(PListTerm listTerm : node.getListTerms())
       {
-        String type_name;
-        if(simpleTermTransformMap.get(listTerm) != null)
-        {
-          type_name = simpleTermTransformMap.get(listTerm);
-        }
-        else
-        {
-          type_name = CG.getAltTransformElemTypes().get(listTerm);
-        }
-        int position = CG.getTermNumbers().get(listTerm);
+        listTerm.apply(this);
+      }
 
-        if(type_name.startsWith("L"))
-        {
-          macros.apply(file, "ParserListVariableDeclaration", new String[] {"" + position});
-        }
-        else if(type_name.equals("null"))
+      int nonNullTermsCount = 0;
+      PListTerm firstNonNullListTerm = null;
+      String firstNonNullTypeName = null;
+      for(PListTerm listTerm : node.getListTerms())
+      {
+        String typeName = lookupInternalTypeName(listTerm);
+        // Null and empty list terms never add any elements to the list and so don't need to be counted.
+        if("null".equals(typeName) || "Lnull".equals(typeName))
         {
-          // No intermediate variable needed for null arguments
+          continue;
         }
-        else
+        nonNullTermsCount++;
+        if(firstNonNullListTerm == null)
         {
-          macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {type_name, type_name.toLowerCase(), "" + position});
+          firstNonNullListTerm = listTerm;
+          firstNonNullTypeName = typeName;
         }
       }
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-  }
 
-  @Override
-  public void outAListTerm(AListTerm node)
-  {
-    try
-    {
-      int listPosition = CG.getTermNumbers().get(node);
+      if(nonNullTermsCount == 0)
+      {
+        throw new RuntimeException("List has non-empty type, but contains no elements!");
+      }
+      assert firstNonNullListTerm != null;
+      assert firstNonNullTypeName != null;
 
-      for(PListTerm listTerm : node.getListTerms())
+      String destType = lookupInternalTypeName(node);
+
+      if(nonNullTermsCount == 1)
       {
-        String type_name;
-        if(simpleTermTransformMap.get(listTerm) != null)
+        if(firstNonNullTypeName.startsWith("L"))
         {
-          type_name = simpleTermTransformMap.get(listTerm);
+          macros.apply(file, "ParserTypedListAssign", new String[] {
+            variableTypeFromInternalType(destType), getVariableName(node), getVariableName(firstNonNullListTerm),
+          });
         }
         else
         {
-          type_name = CG.getAltTransformElemTypes().get(listTerm);
-        }
-        int position = CG.getTermNumbers().get(listTerm);
-
-        if(!type_name.equals("null"))
-        {
-          if(type_name.startsWith("L"))
-          {
-            macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {"list", ""+listPosition, "list", ""+ position});
-          }
-          else
-          {
-            macros.apply(file, "ParserTypedLinkedListAdd", new String[] {"list", ""+listPosition, type_name.toLowerCase(), ""+ position});
-          }
+          macros.apply(file, "ParserTypedSingleElementList", new String[] {
+            variableTypeFromInternalType(destType), getVariableName(node), getVariableName(firstNonNullListTerm),
+          });
         }
       }
-      macros.apply(file, "ParserBraceClosing");
-    }
-    catch(IOException e)
-    {
-      throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
-    }
-  }
-
-  @Override
-  public void outANewTerm(ANewTerm node)
-  {
-    String type_name;
-    if(simpleTermTransformMap.get(node) != null)
-    {
-      type_name = simpleTermTransformMap.get(node);
-    }
-    else
-    {
-      type_name = CG.getAltTransformElemTypes().get(node);
-    }
-    int position = CG.getTermNumbers().get(node);
-    String newAltName = name((AProdName)node.getProdName());
-
-    try
-    {
-      if(type_name.startsWith("L"))
-      {
-        type_name = "list";
-      }
       else
       {
-        type_name = type_name.toLowerCase();
-      }
-      macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
-
-      if(node.getParams().size() > 0)
-      {
-        String isNotTheFirstParam = "";
-
-        for(PTerm term : node.getParams())
+        boolean first = true;
+        for(PListTerm listTerm : node.getListTerms())
         {
-          if(simpleTermTransformMap.get(term) != null)
-          {
-            type_name = simpleTermTransformMap.get(term);
-          }
-          else
+          String typeName = lookupInternalTypeName(listTerm);
+          // Null and empty list terms never add any elements to the list.
+          if("null".equals(typeName) || "Lnull".equals(typeName))
           {
-            type_name = CG.getAltTransformElemTypes().get(term);
+            continue;
           }
-          position = CG.getTermNumbers().get(term);
 
-          if(type_name.equals("null"))
-          {
-            macros.apply(file, "ParserNew&ListBodyParamsNull", new String[] {isNotTheFirstParam+"null"});
-          }
-          else
+          if(typeName.startsWith("L"))
           {
-            if(type_name.startsWith("L"))
+            if(first)
             {
-              type_name = "list";
+              macros.apply(file, "ParserTypedLinkedListInitAddAll", new String[] {
+                variableTypeFromInternalType(destType), getVariableName(node), getVariableName(listTerm),
+              });
             }
             else
             {
-              type_name = type_name.toLowerCase();
+              macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {getVariableName(node), getVariableName(listTerm)});
             }
-            macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam+type_name, ""+position});
           }
-
-          isNotTheFirstParam = ", ";
+          else
+          {
+            if(first)
+            {
+              macros.apply(file, "ParserTypedLinkedListInit", new String[] {
+                variableTypeFromInternalType(destType), getVariableName(node),
+              });
+            }
+            macros.apply(file, "ParserTypedLinkedListAdd", new String[] {getVariableName(node), getVariableName(listTerm)});
+          }
+          first = false;
         }
       }
-      macros.apply(file, "ParserNewBodyNewTail");
-      macros.apply(file, "ParserBraceClosing");
     }
     catch(IOException e)
     {
       throw new RuntimeException("An error occured while writing to " +
-                                 new File(pkgDir, "TokenIndex.java").getAbsolutePath(), e);
+                                 new File(pkgDir, "Parser.java").getAbsolutePath(), e);
     }
   }
 
-  @Override
-  public void outANewListTerm(ANewListTerm node)
+  private void generateNewTerm(Node node, AProdName prodName, List<PTerm> params)
   {
-    String type_name;
-    if(simpleTermTransformMap.get(node) != null)
-    {
-      type_name = simpleTermTransformMap.get(node);
-    }
-    else
-    {
-      type_name = CG.getAltTransformElemTypes().get(node);
-    }
-    int position = CG.getTermNumbers().get(node);
-    String newAltName = name((AProdName)node.getProdName());
+    String newAltName = name(prodName);
+
     try
     {
-      if(type_name.startsWith("L"))
-      {
-        type_name = "list";
-      }
-      else
+      for(PTerm param : params)
       {
-        type_name = type_name.toLowerCase();
+        param.apply(this);
       }
-      macros.apply(file, "ParserNewBodyNew", new String[] {type_name, ""+position, newAltName});
 
-      if(node.getParams().size() > 0)
+      macros.apply(file, "ParserNewBodyNew", new String[] {newAltName, getVariableName(node)});
+
+      if(!params.isEmpty())
       {
         String isNotTheFirstParam = "";
 
-        for(PTerm term : node.getParams())
+        for(PTerm term : params)
         {
-          if(simpleTermTransformMap.get(term) != null)
-          {
-            type_name = simpleTermTransformMap.get(term);
-          }
-          else
-          {
-            type_name = CG.getAltTransformElemTypes().get(term);
-          }
-          position = CG.getTermNumbers().get(term);
-
-          if(type_name.equals("null"))
-          {
-            macros.apply(file, "ParserNew&ListBodyParamsNull", new String[] {isNotTheFirstParam+"null"});
-          }
-          else
-          {
-            if(type_name.startsWith("L"))
-            {
-              type_name = "list";
-            }
-            else
-            {
-              type_name = type_name.toLowerCase();
-            }
-            macros.apply(file, "ParserNew&ListBodyParams", new String[] {isNotTheFirstParam+type_name, ""+position});
-          }
+          macros.apply(file, "ParserNewBodyParam", new String[] {isNotTheFirstParam + getVariableName(term)});
 
           isNotTheFirstParam = ", ";
         }
       }
       macros.apply(file, "ParserNewBodyNewTail");
-      macros.apply(file, "ParserBraceClosing");
     }
     catch(IOException e)
     {
@@ -600,6 +371,18 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
   }
 
+  @Override
+  public void caseANewTerm(ANewTerm node)
+  {
+    generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
+  }
+
+  @Override
+  public void caseANewListTerm(ANewListTerm node)
+  {
+    generateNewTerm(node, (AProdName)node.getProdName(), node.getParams());
+  }
+
   public String name(AProdName node)
   {
     if(node.getProdNameTail() != null)
diff --git a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
index 49571873505a673de3763a006a711f4b9db0e9e4..a1672810bd0b25a3276b5475b4ffb62ae64ff5cb 100644
--- a/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/InternalTransformationsToGrammar.java
@@ -51,7 +51,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
   Map<String, List<PElem>> mapProductionTransformations;
   Map<Node, String> simpleTermOrsimpleListTermTypes;
 
-  private Map<String, String> isElementIsAlist = new TreeMap<>();
+  private Map<String, AElem> isElementIsAlist = new TreeMap<>();
 
   private List<PProd> listProd;
 
@@ -200,6 +200,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
       AltTransformAdapter altTransformAdapter =
         new AltTransformAdapter(simpleTermTransform, listSimpleTermTransform,
                                 currentNewAltName, altIds,
+                                transformIds,
                                 isElementIsAlist,
                                 simpleTermOrsimpleListTermTypes);
 
@@ -256,6 +257,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
         AltTransformAdapter altTransformAdapter =
           new AltTransformAdapter(simpleTermTransform, listSimpleTermTransform,
                                   currentNewAltName, altIds,
+                                  transformIds,
                                   isElementIsAlist,
                                   simpleTermOrsimpleListTermTypes);
 
@@ -423,8 +425,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
             {
               listOfAlternativeElemsWHaveName.add(elemNameOfElem);
             }
-            isElementIsAlist.put(currentProd+"."+currentAltName.toLowerCase()+numero+aElemName.getText(),
-                                 node.getId().getText());
+            isElementIsAlist.put(currentProd+"."+currentAltName.toLowerCase()+numero+aElemName.getText(), node);
           }
         }
         else
@@ -436,8 +437,7 @@ public class InternalTransformationsToGrammar extends DepthFirstAdapter
             {
               listOfAlternativeElemsWHaveName.add(elemNameOfElem);
             }
-            isElementIsAlist.put(currentProd+"."+currentAltName.toLowerCase()+numero+node.getId().getText(),
-                                 node.getId().getText());
+            isElementIsAlist.put(currentProd+"."+currentAltName.toLowerCase()+numero+node.getId().getText(), node);
           }
         }
       }
diff --git a/src/main/java/org/sablecc/sablecc/SableCC.java b/src/main/java/org/sablecc/sablecc/SableCC.java
index be66d8924e2b682897ad3c72e2e2fd6b5214631a..9524c41017ee9f5ad42567baa3a271c3275b4351 100644
--- a/src/main/java/org/sablecc/sablecc/SableCC.java
+++ b/src/main/java/org/sablecc/sablecc/SableCC.java
@@ -197,15 +197,11 @@ public class SableCC {
       tree = new Parser(new Lexer(reader)).parse();
     }
 
-    boolean hasTransformations = false;
-
     if (((AGrammar) tree.getPGrammar()).getAst() == null) {
       System.out
           .println("Adding productions and alternative of section AST.");
       // AddAstProductions astProductions = new AddAstProductions();
       tree.apply(new AddAstProductions());
-    } else {
-      hasTransformations = true;
     }
 
     System.out.println("Verifying identifiers.");
@@ -269,8 +265,7 @@ public class SableCC {
     try {
       System.out.println("Generating the parser.");
       tree.apply(new GenParser(ids, alt_ids, transform_ids, ast_ids
-          .getFirstAstProduction(), processInlining, prettyPrinting,
-          hasTransformations));
+          .getFirstAstProduction(), processInlining, prettyPrinting));
     } catch (RuntimeException e) {
       System.out.println(e.getMessage());
       throw e;
diff --git a/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
index 5dfa2cec56a25b4cbd219525f7e235f7811fe7dd..d4bdef14fe29e10118dbf1b215223425c61fb728 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
@@ -529,7 +529,5 @@ public class AnalysisAdapter implements Analysis
     }
 
     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 7132e6efa4369f2ac32663be65aa9a6cdb3cbc79..bc1528069f859b93c9be5bd5bfcff8a0bc87f672 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
@@ -20,14 +20,10 @@ public class DepthFirstAdapter extends AnalysisAdapter
     }
 
     public void defaultIn(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     public void defaultOut(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     @Override
     public void caseStart(Start node)
diff --git a/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
index 3f75d98fdf099be198e5d7af5da0ce395527916f..6ff1e7d4bdbefb2f1f898596bb0fec429a11e86d 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
@@ -21,14 +21,10 @@ public class ReversedDepthFirstAdapter extends AnalysisAdapter
     }
 
     public void defaultIn(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     public void defaultOut(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     @Override
     public void caseStart(Start node)
diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
index a582d499010aec9ae53f0529e766388864304d1a..bb0f9ff3e44008698a0869b4692cdce1b6698dbd 100644
--- a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
+++ b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
@@ -7,69 +7,49 @@ import java.io.DataInputStream;
 import java.io.InputStream;
 import java.io.IOException;
 import java.io.PushbackReader;
-import java.util.ArrayList;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Queue;
 
 import de.hhu.stups.sablecc.patch.IToken;
 
 import org.sablecc.sablecc.node.*;
 
-@SuppressWarnings({"deprecation", "unused"}) // ITokenListContainer is deprecated, but the generated lexer still implements it for compatibility
-public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
+@SuppressWarnings("unused")
+public class Lexer
 {
     protected Token token;
     protected State state = State.NORMAL;
 
-    private PushbackReader in;
+    private final PushbackReader in;
     protected int line;
     protected int pos;
     private boolean cr;
     private boolean eof;
     private final StringBuilder text = new StringBuilder();
 
-    private List<IToken> tokenList;
+    @Deprecated
     private final Queue<IToken> nextList = new LinkedList<IToken>();
 
-    public Queue<IToken> getNextList() {
-        return nextList;
-    }
-
     /**
-     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
-     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     * @deprecated Use {@link #token} to get, modify, replace, and/or delete the current token.
+     *     Injecting new tokens into the token stream will not be supported in the future.
      */
     @Deprecated
-    @Override
-    public List<IToken> getTokenList() {
-        return tokenList;
+    public Queue<IToken> getNextList() {
+        return nextList;
     }
 
-    private void setToken(Token t) {
-        token = t;
-    }
+    protected void filter() throws LexerException, IOException
+    {}
 
     /**
-     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
-     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     * @deprecated Override {@link #filter()} instead.
      */
     @Deprecated
-    public void setTokenList(final List<IToken> list) {
-        tokenList = list;
-    }
-
-
-    protected void filter() throws LexerException, IOException
-    {
-        // Do nothing
-    }
-
     protected void filterWrap() throws LexerException, IOException
     {
         filter();
         if (token != null) {
-            getTokenList().add(token);
             nextList.add(token);
         }
     }
@@ -78,30 +58,31 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
     public Lexer(PushbackReader in)
     {
         this.in = in;
-        setTokenList(new ArrayList<IToken>());
     }
 
+    @SuppressWarnings("deprecation") // because of filterWrap and nextList
     public Token peek() throws LexerException, IOException
     {
         while(this.token == null)
         {
-            this.setToken(getToken());
+            token = getToken();
             filterWrap();
         }
 
         return (Token) nextList.peek();
     }
 
+    @SuppressWarnings("deprecation") // because of filterWrap and nextList
     public Token next() throws LexerException, IOException
     {
         while(this.token == null)
         {
-            this.setToken(getToken());
+            token = getToken();
             filterWrap();
         }
 
         Token result = (Token) nextList.poll();
-        this.setToken(null);
+        token = null;
         return result;
     }
 
@@ -213,7 +194,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                     {
                         case 0:
                         {
-                            Token token = new0(
+                            Token token = new TPkgId(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -228,7 +209,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 1:
                         {
-                            Token token = new1(
+                            Token token = new TPackage(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -242,7 +223,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 2:
                         {
-                            Token token = new2(
+                            Token token = new TStates(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -252,7 +233,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 3:
                         {
-                            Token token = new3(
+                            Token token = new THelpers(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -262,7 +243,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 4:
                         {
-                            Token token = new4(
+                            Token token = new TTokens(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -272,7 +253,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 5:
                         {
-                            Token token = new5(
+                            Token token = new TIgnored(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -282,7 +263,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 6:
                         {
-                            Token token = new6(
+                            Token token = new TProductions(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -292,7 +273,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 7:
                         {
-                            Token token = new7(
+                            Token token = new TAbstract(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -302,7 +283,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 8:
                         {
-                            Token token = new8(
+                            Token token = new TSyntax(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -312,7 +293,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 9:
                         {
-                            Token token = new9(
+                            Token token = new TTree(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -322,7 +303,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 10:
                         {
-                            Token token = new10(
+                            Token token = new TNew(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -332,7 +313,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 11:
                         {
-                            Token token = new11(
+                            Token token = new TNull(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -342,7 +323,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 12:
                         {
-                            Token token = new12(
+                            Token token = new TTokenSpecifier(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -352,7 +333,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 13:
                         {
-                            Token token = new13(
+                            Token token = new TProductionSpecifier(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -362,7 +343,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 14:
                         {
-                            Token token = new14(
+                            Token token = new TDot(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -372,7 +353,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 15:
                         {
-                            Token token = new15(
+                            Token token = new TDDot(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -382,7 +363,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 16:
                         {
-                            Token token = new16(
+                            Token token = new TSemicolon(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -397,7 +378,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 17:
                         {
-                            Token token = new17(
+                            Token token = new TEqual(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -407,7 +388,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 18:
                         {
-                            Token token = new18(
+                            Token token = new TLBkt(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -417,7 +398,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 19:
                         {
-                            Token token = new19(
+                            Token token = new TRBkt(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -427,7 +408,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 20:
                         {
-                            Token token = new20(
+                            Token token = new TLPar(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -437,7 +418,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 21:
                         {
-                            Token token = new21(
+                            Token token = new TRPar(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -447,7 +428,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 22:
                         {
-                            Token token = new22(
+                            Token token = new TLBrace(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -457,7 +438,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 23:
                         {
-                            Token token = new23(
+                            Token token = new TRBrace(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -467,7 +448,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 24:
                         {
-                            Token token = new24(
+                            Token token = new TPlus(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -477,7 +458,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 25:
                         {
-                            Token token = new25(
+                            Token token = new TMinus(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -487,7 +468,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 26:
                         {
-                            Token token = new26(
+                            Token token = new TQMark(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -497,7 +478,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 27:
                         {
-                            Token token = new27(
+                            Token token = new TStar(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -507,7 +488,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 28:
                         {
-                            Token token = new28(
+                            Token token = new TBar(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -517,7 +498,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 29:
                         {
-                            Token token = new29(
+                            Token token = new TComma(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -527,7 +508,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 30:
                         {
-                            Token token = new30(
+                            Token token = new TSlash(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -537,7 +518,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 31:
                         {
-                            Token token = new31(
+                            Token token = new TArrow(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -547,7 +528,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 32:
                         {
-                            Token token = new32(
+                            Token token = new TColon(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -557,7 +538,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 33:
                         {
-                            Token token = new33(
+                            Token token = new TId(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -568,7 +549,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 34:
                         {
-                            Token token = new34(
+                            Token token = new TChar(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -579,7 +560,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 35:
                         {
-                            Token token = new35(
+                            Token token = new TDecChar(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -590,7 +571,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 36:
                         {
-                            Token token = new36(
+                            Token token = new THexChar(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -601,7 +582,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 37:
                         {
-                            Token token = new37(
+                            Token token = new TString(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -612,7 +593,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 38:
                         {
-                            Token token = new38(
+                            Token token = new TBlank(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -623,7 +604,7 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
                         }
                         case 39:
                         {
-                            Token token = new39(
+                            Token token = new TComment(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -652,47 +633,6 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
         }
     }
 
-    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(this.eof)
diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 46fa13efb215524e39975d042ef80890130c29c6..868516db660840f4961534721cdb6c667a06f292 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -16,7 +16,6 @@ public final class AAlt extends PAlt
 
     public AAlt()
     {
-        // Constructor
     }
 
     public AAlt(
@@ -24,7 +23,6 @@ public final class AAlt extends PAlt
           List<PElem> _elems_,
           PAltTransform _altTransform_)
     {
-        // Constructor
         setAltName(_altName_);
 
         setElems(_elems_);
@@ -140,7 +138,6 @@ public final class AAlt extends PAlt
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._altName_ == child)
         {
             this._altName_ = null;
@@ -164,7 +161,6 @@ public final class AAlt extends PAlt
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._altName_ == oldChild)
         {
             setAltName((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 40ae9973af24d27c45cd43fc02484dba18b09bbf..7a3711c2763428503b8dfce8a405def437f3d12a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -16,7 +16,6 @@ public final class AAltTransform extends PAltTransform
 
     public AAltTransform()
     {
-        // Constructor
     }
 
     public AAltTransform(
@@ -24,7 +23,6 @@ public final class AAltTransform extends PAltTransform
           List<PTerm> _terms_,
           TRBrace _rBrace_)
     {
-        // Constructor
         setLBrace(_lBrace_);
 
         setTerms(_terms_);
@@ -140,7 +138,6 @@ public final class AAltTransform extends PAltTransform
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._lBrace_ == child)
         {
             this._lBrace_ = null;
@@ -164,7 +161,6 @@ public final class AAltTransform extends PAltTransform
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._lBrace_ == oldChild)
         {
             setLBrace((TLBrace) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index 82a3c2876bc2907d96d2f6ffbdf1d0190e02adad..a0c94e04769204e21d4711f807a0ee2dec0a3232 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -14,13 +14,11 @@ public final class AAst extends PAst
 
     public AAst()
     {
-        // Constructor
     }
 
     public AAst(
           List<PAstProd> _prods_)
     {
-        // Constructor
         setProds(_prods_);
 
     }
@@ -78,7 +76,6 @@ public final class AAst extends PAst
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._prods_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class AAst extends PAst
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<PAstProd> i = this._prods_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index 57f8d822fb9c402b9490579d65dc7194b95e2307..e08e5cf0de0682419983a2b1d1202cf7e6e621f4 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -15,14 +15,12 @@ public final class AAstAlt extends PAstAlt
 
     public AAstAlt()
     {
-        // Constructor
     }
 
     public AAstAlt(
           TId _altName_,
           List<PElem> _elems_)
     {
-        // Constructor
         setAltName(_altName_);
 
         setElems(_elems_);
@@ -109,7 +107,6 @@ public final class AAstAlt extends PAstAlt
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._altName_ == child)
         {
             this._altName_ = null;
@@ -127,7 +124,6 @@ public final class AAstAlt extends PAstAlt
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._altName_ == oldChild)
         {
             setAltName((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index 9548aa5c410d1b1c132f36901b7234623a328b9d..aaa856ecbdbe2f9eddd099795e7fe325e8ab6bb5 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -15,14 +15,12 @@ public final class AAstProd extends PAstProd
 
     public AAstProd()
     {
-        // Constructor
     }
 
     public AAstProd(
           TId _id_,
           List<PAstAlt> _alts_)
     {
-        // Constructor
         setId(_id_);
 
         setAlts(_alts_);
@@ -109,7 +107,6 @@ public final class AAstProd extends PAstProd
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -127,7 +124,6 @@ public final class AAstProd extends PAstProd
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
index 270a06ccf7ec1b69314995cab75ce6f938004850..925d9381efda3224f099ffe40c66b535d3286644 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
@@ -10,13 +10,11 @@ public final class ACharBasic extends PBasic
 
     public ACharBasic()
     {
-        // Constructor
     }
 
     public ACharBasic(
           PChar _char_)
     {
-        // Constructor
         setChar(_char_);
 
     }
@@ -74,7 +72,6 @@ public final class ACharBasic extends PBasic
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._char_ == child)
         {
             this._char_ = null;
@@ -87,7 +84,6 @@ public final class ACharBasic extends PBasic
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._char_ == oldChild)
         {
             setChar((PChar) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharChar.java b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
index 0b11b64769f5fa9c142f2706d4b42d6130475707..188050b861aa28e9180c78888efb583dd8620c6a 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
@@ -10,13 +10,11 @@ public final class ACharChar extends PChar
 
     public ACharChar()
     {
-        // Constructor
     }
 
     public ACharChar(
           TChar _char_)
     {
-        // Constructor
         setChar(_char_);
 
     }
@@ -74,7 +72,6 @@ public final class ACharChar extends PChar
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._char_ == child)
         {
             this._char_ = null;
@@ -87,7 +84,6 @@ public final class ACharChar extends PChar
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._char_ == oldChild)
         {
             setChar((TChar) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 76b5d87780c0df49b870396a3c78d555b2416c69..1ade31e73081c3137f1b76b7c769fe4231b486df 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -14,13 +14,11 @@ public final class AConcat extends PConcat
 
     public AConcat()
     {
-        // Constructor
     }
 
     public AConcat(
           List<PUnExp> _unExps_)
     {
-        // Constructor
         setUnExps(_unExps_);
 
     }
@@ -78,7 +76,6 @@ public final class AConcat extends PConcat
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._unExps_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class AConcat extends PConcat
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<PUnExp> i = this._unExps_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/ADecChar.java b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
index 0778ae0ddededaffc90e221f3fb7e95999f2522a..e2743bd85b4f1ceefe1ee8fc7bca2c2d9b0e7c20 100644
--- a/src/main/java/org/sablecc/sablecc/node/ADecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
@@ -10,13 +10,11 @@ public final class ADecChar extends PChar
 
     public ADecChar()
     {
-        // Constructor
     }
 
     public ADecChar(
           TDecChar _decChar_)
     {
-        // Constructor
         setDecChar(_decChar_);
 
     }
@@ -74,7 +72,6 @@ public final class ADecChar extends PChar
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._decChar_ == child)
         {
             this._decChar_ = null;
@@ -87,7 +84,6 @@ public final class ADecChar extends PChar
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._decChar_ == oldChild)
         {
             setDecChar((TDecChar) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AElem.java b/src/main/java/org/sablecc/sablecc/node/AElem.java
index f961acc6ee47ccaf2b0f8321abaac9e5f086912a..ef1d47c784b0c8cc31c97a9436b07f4451cf766e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/AElem.java
@@ -13,7 +13,6 @@ public final class AElem extends PElem
 
     public AElem()
     {
-        // Constructor
     }
 
     public AElem(
@@ -22,7 +21,6 @@ public final class AElem extends PElem
           TId _id_,
           PUnOp _unOp_)
     {
-        // Constructor
         setElemName(_elemName_);
 
         setSpecifier(_specifier_);
@@ -167,7 +165,6 @@ public final class AElem extends PElem
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._elemName_ == child)
         {
             this._elemName_ = null;
@@ -198,7 +195,6 @@ public final class AElem extends PElem
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._elemName_ == oldChild)
         {
             setElemName((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index ef39aa3ef21844b05520fadbe17880fc8a2a9566..6a2cd2adaf77c3f47e0aec2b6c1c2518d4d8ca60 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -20,7 +20,6 @@ public final class AGrammar extends PGrammar
 
     public AGrammar()
     {
-        // Constructor
     }
 
     public AGrammar(
@@ -32,7 +31,6 @@ public final class AGrammar extends PGrammar
           PProductions _productions_,
           PAst _ast_)
     {
-        // Constructor
         setPackage(_package_);
 
         setHelpers(_helpers_);
@@ -264,7 +262,6 @@ public final class AGrammar extends PGrammar
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._package_.remove(child))
         {
             return;
@@ -312,7 +309,6 @@ public final class AGrammar extends PGrammar
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<TPkgId> i = this._package_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
index 93742b973d0c4212ec8f6ede8ef1bb440714c74a..f19e5c7c146583b3dcd1c9cfe59e7e40f515f1b0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
@@ -11,14 +11,12 @@ public final class AHelperDef extends PHelperDef
 
     public AHelperDef()
     {
-        // Constructor
     }
 
     public AHelperDef(
           TId _id_,
           PRegExp _regExp_)
     {
-        // Constructor
         setId(_id_);
 
         setRegExp(_regExp_);
@@ -105,7 +103,6 @@ public final class AHelperDef extends PHelperDef
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -124,7 +121,6 @@ public final class AHelperDef extends PHelperDef
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index f083aeccd7c11cb2ccae6722e3a713eb739de4fa..772d6b8b20974d2082367109c1e41c6cb6b053e8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -14,13 +14,11 @@ public final class AHelpers extends PHelpers
 
     public AHelpers()
     {
-        // Constructor
     }
 
     public AHelpers(
           List<PHelperDef> _helperDefs_)
     {
-        // Constructor
         setHelperDefs(_helperDefs_);
 
     }
@@ -78,7 +76,6 @@ public final class AHelpers extends PHelpers
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._helperDefs_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class AHelpers extends PHelpers
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<PHelperDef> i = this._helperDefs_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/AHexChar.java b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
index ea2c910d1d49ce0f9e927ca69e814ddf7c571c71..bde57e7bac6547a1b218db75d8d0cd8034554bed 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
@@ -10,13 +10,11 @@ public final class AHexChar extends PChar
 
     public AHexChar()
     {
-        // Constructor
     }
 
     public AHexChar(
           THexChar _hexChar_)
     {
-        // Constructor
         setHexChar(_hexChar_);
 
     }
@@ -74,7 +72,6 @@ public final class AHexChar extends PChar
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._hexChar_ == child)
         {
             this._hexChar_ = null;
@@ -87,7 +84,6 @@ public final class AHexChar extends PChar
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._hexChar_ == oldChild)
         {
             setHexChar((THexChar) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
index 2089831188cb12dc623730ec625934679b13fe73..565e3200c6c0635c84a4f9db311fcede0765385a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
@@ -10,13 +10,11 @@ public final class AIdBasic extends PBasic
 
     public AIdBasic()
     {
-        // Constructor
     }
 
     public AIdBasic(
           TId _id_)
     {
-        // Constructor
         setId(_id_);
 
     }
@@ -74,7 +72,6 @@ public final class AIdBasic extends PBasic
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -87,7 +84,6 @@ public final class AIdBasic extends PBasic
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index 21caa3f72801410e9ea8f11c13f0e983c8c985aa..5290ee25abbc2384b93ae9462882821d7e17cd95 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -14,13 +14,11 @@ public final class AIgnTokens extends PIgnTokens
 
     public AIgnTokens()
     {
-        // Constructor
     }
 
     public AIgnTokens(
           List<TId> _listId_)
     {
-        // Constructor
         setListId(_listId_);
 
     }
@@ -78,7 +76,6 @@ public final class AIgnTokens extends PIgnTokens
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._listId_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class AIgnTokens extends PIgnTokens
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<TId> i = this._listId_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
index aa6dcc6ab68b6d5744a714b694cef42c9855a0fb..9bff5aa293c556c43530f33f6cfcc8ce5a5f2706 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
@@ -11,14 +11,12 @@ public final class AIntervalSet extends PSet
 
     public AIntervalSet()
     {
-        // Constructor
     }
 
     public AIntervalSet(
           PChar _left_,
           PChar _right_)
     {
-        // Constructor
         setLeft(_left_);
 
         setRight(_right_);
@@ -105,7 +103,6 @@ public final class AIntervalSet extends PSet
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._left_ == child)
         {
             this._left_ = null;
@@ -124,7 +121,6 @@ public final class AIntervalSet extends PSet
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._left_ == oldChild)
         {
             setLeft((PChar) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index d87e033f3da0e89daaac6f78d70067f30dfa5ac8..bfa2c59eb2bfbbe787c45463af461eb5cfa610e3 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -15,14 +15,12 @@ public final class AListTerm extends PTerm
 
     public AListTerm()
     {
-        // Constructor
     }
 
     public AListTerm(
           TLBkt _lBkt_,
           List<PListTerm> _listTerms_)
     {
-        // Constructor
         setLBkt(_lBkt_);
 
         setListTerms(_listTerms_);
@@ -109,7 +107,6 @@ public final class AListTerm extends PTerm
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._lBkt_ == child)
         {
             this._lBkt_ = null;
@@ -127,7 +124,6 @@ public final class AListTerm extends PTerm
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._lBkt_ == oldChild)
         {
             setLBkt((TLBkt) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
index d707ff0d2662fa874328e8dc072c94d7f50c1c31..fd1e1e56a1d82345c9369931217712c53fa28e7a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -9,7 +9,6 @@ public final class AMinusBinOp extends PBinOp
 
     public AMinusBinOp()
     {
-        // Constructor
     }
 
     public AMinusBinOp(AMinusBinOp node)
@@ -38,14 +37,12 @@ public final class AMinusBinOp extends PBinOp
     @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 0d3d8341d0b3d7c516dd49709a293b771b7f63a2..b2c151bba0d1456c1839bf556146b852fb8f9db0 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -16,7 +16,6 @@ public final class ANewListTerm extends PListTerm
 
     public ANewListTerm()
     {
-        // Constructor
     }
 
     public ANewListTerm(
@@ -24,7 +23,6 @@ public final class ANewListTerm extends PListTerm
           TLPar _lPar_,
           List<PTerm> _params_)
     {
-        // Constructor
         setProdName(_prodName_);
 
         setLPar(_lPar_);
@@ -140,7 +138,6 @@ public final class ANewListTerm extends PListTerm
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._prodName_ == child)
         {
             this._prodName_ = null;
@@ -164,7 +161,6 @@ public final class ANewListTerm extends PListTerm
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._prodName_ == oldChild)
         {
             setProdName((PProdName) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index 601f7923f6c48099cb2e481e81967218c5febde1..4fb329bde1657a4b8a9dcc365ea68561c8049c1c 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -16,7 +16,6 @@ public final class ANewTerm extends PTerm
 
     public ANewTerm()
     {
-        // Constructor
     }
 
     public ANewTerm(
@@ -24,7 +23,6 @@ public final class ANewTerm extends PTerm
           TLPar _lPar_,
           List<PTerm> _params_)
     {
-        // Constructor
         setProdName(_prodName_);
 
         setLPar(_lPar_);
@@ -140,7 +138,6 @@ public final class ANewTerm extends PTerm
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._prodName_ == child)
         {
             this._prodName_ = null;
@@ -164,7 +161,6 @@ public final class ANewTerm extends PTerm
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._prodName_ == oldChild)
         {
             setProdName((PProdName) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
index dcd1f7f03016cf85edbe33a38932573e96e1328a..e5846fc1a9468177ecffc92d822f42b4f79f8ac0 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
@@ -9,7 +9,6 @@ public final class ANullTerm extends PTerm
 
     public ANullTerm()
     {
-        // Constructor
     }
 
     public ANullTerm(ANullTerm node)
@@ -38,14 +37,12 @@ public final class ANullTerm extends PTerm
     @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 0cd95937a665df7a27df7e5732e06737ada2b682..fc8b1c38ab58ee68996bd669753c5c3d52f1b00e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
@@ -12,7 +12,6 @@ public final class AOperationSet extends PSet
 
     public AOperationSet()
     {
-        // Constructor
     }
 
     public AOperationSet(
@@ -20,7 +19,6 @@ public final class AOperationSet extends PSet
           PBinOp _binOp_,
           PBasic _right_)
     {
-        // Constructor
         setLeft(_left_);
 
         setBinOp(_binOp_);
@@ -136,7 +134,6 @@ public final class AOperationSet extends PSet
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._left_ == child)
         {
             this._left_ = null;
@@ -161,7 +158,6 @@ public final class AOperationSet extends PSet
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._left_ == oldChild)
         {
             setLeft((PBasic) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
index 653ce61752c9e7dc3b91309ea7d3b7e1a9eba008..e7ac89e687070163a6398d5ccb52d2c318cf2a97 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
@@ -9,7 +9,6 @@ public final class APlusBinOp extends PBinOp
 
     public APlusBinOp()
     {
-        // Constructor
     }
 
     public APlusBinOp(APlusBinOp node)
@@ -38,14 +37,12 @@ public final class APlusBinOp extends PBinOp
     @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 c18ef1bf8d4d78a3a2446c86fa48518a6df6995a..06e6fa7f89f0f0f5e0e463cbcf8d43c62a1d3e28 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
@@ -10,13 +10,11 @@ public final class APlusUnOp extends PUnOp
 
     public APlusUnOp()
     {
-        // Constructor
     }
 
     public APlusUnOp(
           TPlus _plus_)
     {
-        // Constructor
         setPlus(_plus_);
 
     }
@@ -74,7 +72,6 @@ public final class APlusUnOp extends PUnOp
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._plus_ == child)
         {
             this._plus_ = null;
@@ -87,7 +84,6 @@ public final class APlusUnOp extends PUnOp
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._plus_ == oldChild)
         {
             setPlus((TPlus) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index ffa7289bfcd677de1924216fcfefd6814d41f8aa..cd2f5039ba8ba6f5122d25bc152b4af7ab7a4d44 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -17,7 +17,6 @@ public final class AProd extends PProd
 
     public AProd()
     {
-        // Constructor
     }
 
     public AProd(
@@ -26,7 +25,6 @@ public final class AProd extends PProd
           List<PElem> _prodTransform_,
           List<PAlt> _alts_)
     {
-        // Constructor
         setId(_id_);
 
         setArrow(_arrow_);
@@ -171,7 +169,6 @@ public final class AProd extends PProd
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -200,7 +197,6 @@ public final class AProd extends PProd
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AProdName.java b/src/main/java/org/sablecc/sablecc/node/AProdName.java
index f5be37eb0fc230b8a7f2e8ea97d6e1cab1659f59..a11a3803e86b1b8d6894da74c0163dd092f452f3 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProdName.java
@@ -11,14 +11,12 @@ public final class AProdName extends PProdName
 
     public AProdName()
     {
-        // Constructor
     }
 
     public AProdName(
           TId _id_,
           TId _prodNameTail_)
     {
-        // Constructor
         setId(_id_);
 
         setProdNameTail(_prodNameTail_);
@@ -105,7 +103,6 @@ public final class AProdName extends PProdName
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -124,7 +121,6 @@ public final class AProdName extends PProdName
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
index cccd16d36c56e44cec0f3b2f4e1d0c89f5ed859d..cd822a61eb245bbb9cfa679aba3ef760477fd790 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -9,7 +9,6 @@ public final class AProductionSpecifier extends PSpecifier
 
     public AProductionSpecifier()
     {
-        // Constructor
     }
 
     public AProductionSpecifier(AProductionSpecifier node)
@@ -38,14 +37,12 @@ public final class AProductionSpecifier extends PSpecifier
     @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 f95ec5a099e09a9313a694432b1cc77957d6ccdf..4e73e965ea600e0f15e424066ea88f1eb4df0f90 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -14,13 +14,11 @@ public final class AProductions extends PProductions
 
     public AProductions()
     {
-        // Constructor
     }
 
     public AProductions(
           List<PProd> _prods_)
     {
-        // Constructor
         setProds(_prods_);
 
     }
@@ -78,7 +76,6 @@ public final class AProductions extends PProductions
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._prods_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class AProductions extends PProductions
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<PProd> i = this._prods_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
index 4eb1cc4b29b308c0134b3ecba3fbf68cbda994b0..c78c19fc5b0468841366b32a02353e0b760ae2d5 100644
--- a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -10,13 +10,11 @@ public final class AQMarkUnOp extends PUnOp
 
     public AQMarkUnOp()
     {
-        // Constructor
     }
 
     public AQMarkUnOp(
           TQMark _qMark_)
     {
-        // Constructor
         setQMark(_qMark_);
 
     }
@@ -74,7 +72,6 @@ public final class AQMarkUnOp extends PUnOp
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._qMark_ == child)
         {
             this._qMark_ = null;
@@ -87,7 +84,6 @@ public final class AQMarkUnOp extends PUnOp
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._qMark_ == oldChild)
         {
             setQMark((TQMark) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index ad35d8b27432e4a8df7c469cbf57c813aa1c6878..7b604e5ddbe31e34039e8310248785e8029b45f7 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -14,13 +14,11 @@ public final class ARegExp extends PRegExp
 
     public ARegExp()
     {
-        // Constructor
     }
 
     public ARegExp(
           List<PConcat> _concats_)
     {
-        // Constructor
         setConcats(_concats_);
 
     }
@@ -78,7 +76,6 @@ public final class ARegExp extends PRegExp
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._concats_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class ARegExp extends PRegExp
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<PConcat> i = this._concats_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
index 8169e64fb913c1eddd618056d78d2c40d5e621c6..4978f8948f4f2ae400ede54cfcc72541ed16599f 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -10,13 +10,11 @@ public final class ARegExpBasic extends PBasic
 
     public ARegExpBasic()
     {
-        // Constructor
     }
 
     public ARegExpBasic(
           PRegExp _regExp_)
     {
-        // Constructor
         setRegExp(_regExp_);
 
     }
@@ -74,7 +72,6 @@ public final class ARegExpBasic extends PBasic
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._regExp_ == child)
         {
             this._regExp_ = null;
@@ -87,7 +84,6 @@ public final class ARegExpBasic extends PBasic
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._regExp_ == oldChild)
         {
             setRegExp((PRegExp) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
index 10040dd0a0f43b69962f15b84ca873de2ba22bfb..53a957cb18e2da018bf57bafe8c31a794bd3d1fe 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
@@ -10,13 +10,11 @@ public final class ASetBasic extends PBasic
 
     public ASetBasic()
     {
-        // Constructor
     }
 
     public ASetBasic(
           PSet _set_)
     {
-        // Constructor
         setSet(_set_);
 
     }
@@ -74,7 +72,6 @@ public final class ASetBasic extends PBasic
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._set_ == child)
         {
             this._set_ = null;
@@ -87,7 +84,6 @@ public final class ASetBasic extends PBasic
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._set_ == oldChild)
         {
             setSet((PSet) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
index 2efef462828b5c08aeb359edd1b8b4555e2a1563..de072dddfccca3cf48bde6b7263bcc14b740dfc7 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -12,7 +12,6 @@ public final class ASimpleListTerm extends PListTerm
 
     public ASimpleListTerm()
     {
-        // Constructor
     }
 
     public ASimpleListTerm(
@@ -20,7 +19,6 @@ public final class ASimpleListTerm extends PListTerm
           TId _id_,
           TId _simpleTermTail_)
     {
-        // Constructor
         setSpecifier(_specifier_);
 
         setId(_id_);
@@ -136,7 +134,6 @@ public final class ASimpleListTerm extends PListTerm
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._specifier_ == child)
         {
             this._specifier_ = null;
@@ -161,7 +158,6 @@ public final class ASimpleListTerm extends PListTerm
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._specifier_ == oldChild)
         {
             setSpecifier((PSpecifier) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
index 1138d998a1cff02691ef3bd0ef93db955fa7a55e..801c48c2137f889c56e203d6c8dc86caa6734f45 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -12,7 +12,6 @@ public final class ASimpleTerm extends PTerm
 
     public ASimpleTerm()
     {
-        // Constructor
     }
 
     public ASimpleTerm(
@@ -20,7 +19,6 @@ public final class ASimpleTerm extends PTerm
           TId _id_,
           TId _simpleTermTail_)
     {
-        // Constructor
         setSpecifier(_specifier_);
 
         setId(_id_);
@@ -136,7 +134,6 @@ public final class ASimpleTerm extends PTerm
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._specifier_ == child)
         {
             this._specifier_ = null;
@@ -161,7 +158,6 @@ public final class ASimpleTerm extends PTerm
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._specifier_ == oldChild)
         {
             setSpecifier((PSpecifier) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
index 9e6fa0d45701ebb7a8df44bd79112912bf7401f0..626ff012036ea7c35177c470a56d78b0536f5a18 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
@@ -10,13 +10,11 @@ public final class AStarUnOp extends PUnOp
 
     public AStarUnOp()
     {
-        // Constructor
     }
 
     public AStarUnOp(
           TStar _star_)
     {
-        // Constructor
         setStar(_star_);
 
     }
@@ -74,7 +72,6 @@ public final class AStarUnOp extends PUnOp
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._star_ == child)
         {
             this._star_ = null;
@@ -87,7 +84,6 @@ public final class AStarUnOp extends PUnOp
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._star_ == oldChild)
         {
             setStar((TStar) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 7af91334ade49f4cd65670189bc7ae1e59bbc3e5..706d3c7ddeaed996c9c69bd7a0351661519fb6f4 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -16,7 +16,6 @@ public final class AStateList extends PStateList
 
     public AStateList()
     {
-        // Constructor
     }
 
     public AStateList(
@@ -24,7 +23,6 @@ public final class AStateList extends PStateList
           PTransition _transition_,
           List<PStateListTail> _stateLists_)
     {
-        // Constructor
         setId(_id_);
 
         setTransition(_transition_);
@@ -140,7 +138,6 @@ public final class AStateList extends PStateList
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -164,7 +161,6 @@ public final class AStateList extends PStateList
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
index 748b9dbc23cffba22b88fbe63e2fc9c1ccfc72e0..6f5222864c45d681ec832a2430f8519a444e86b8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
@@ -11,14 +11,12 @@ public final class AStateListTail extends PStateListTail
 
     public AStateListTail()
     {
-        // Constructor
     }
 
     public AStateListTail(
           TId _id_,
           PTransition _transition_)
     {
-        // Constructor
         setId(_id_);
 
         setTransition(_transition_);
@@ -105,7 +103,6 @@ public final class AStateListTail extends PStateListTail
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -124,7 +121,6 @@ public final class AStateListTail extends PStateListTail
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index a191372642bbec5fbb06e9ff08165297dc33dddf..a5bd2e06f6ce99e7f00f662fc8e062c53cfab678 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -14,13 +14,11 @@ public final class AStates extends PStates
 
     public AStates()
     {
-        // Constructor
     }
 
     public AStates(
           List<TId> _listId_)
     {
-        // Constructor
         setListId(_listId_);
 
     }
@@ -78,7 +76,6 @@ public final class AStates extends PStates
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._listId_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class AStates extends PStates
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<TId> i = this._listId_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
index c52baeb47e15b7888ef5efd7a7a61330207613b1..ff1dd0a0d49bd4a47c9417cb9c8e706e8e9b8bb3 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
@@ -10,13 +10,11 @@ public final class AStringBasic extends PBasic
 
     public AStringBasic()
     {
-        // Constructor
     }
 
     public AStringBasic(
           TString _string_)
     {
-        // Constructor
         setString(_string_);
 
     }
@@ -74,7 +72,6 @@ public final class AStringBasic extends PBasic
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._string_ == child)
         {
             this._string_ = null;
@@ -87,7 +84,6 @@ public final class AStringBasic extends PBasic
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._string_ == oldChild)
         {
             setString((TString) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
index 21aa248d38b76ca0e804744122f3fd86e39bee7f..b7af9703df8e7beb6eb767b1ffe14b14d41b0681 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
@@ -14,7 +14,6 @@ public final class ATokenDef extends PTokenDef
 
     public ATokenDef()
     {
-        // Constructor
     }
 
     public ATokenDef(
@@ -24,7 +23,6 @@ public final class ATokenDef extends PTokenDef
           TSlash _slash_,
           PRegExp _lookAhead_)
     {
-        // Constructor
         setStateList(_stateList_);
 
         setId(_id_);
@@ -198,7 +196,6 @@ public final class ATokenDef extends PTokenDef
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._stateList_ == child)
         {
             this._stateList_ = null;
@@ -235,7 +232,6 @@ public final class ATokenDef extends PTokenDef
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._stateList_ == oldChild)
         {
             setStateList((PStateList) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
index 4cabc05889acd10273cb4c0b519cf452a48b820d..b4223d8a7e03f741fb066afc2d5f9c209fb60c6d 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -9,7 +9,6 @@ public final class ATokenSpecifier extends PSpecifier
 
     public ATokenSpecifier()
     {
-        // Constructor
     }
 
     public ATokenSpecifier(ATokenSpecifier node)
@@ -38,14 +37,12 @@ public final class ATokenSpecifier extends PSpecifier
     @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 d128831b37934f484e107628fdbaa0dee4726267..d07b76d12cf03bb4245035872f64cf858325afc8 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -14,13 +14,11 @@ public final class ATokens extends PTokens
 
     public ATokens()
     {
-        // Constructor
     }
 
     public ATokens(
           List<PTokenDef> _tokenDefs_)
     {
-        // Constructor
         setTokenDefs(_tokenDefs_);
 
     }
@@ -78,7 +76,6 @@ public final class ATokens extends PTokens
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._tokenDefs_.remove(child))
         {
             return;
@@ -90,7 +87,6 @@ public final class ATokens extends PTokens
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         for(ListIterator<PTokenDef> i = this._tokenDefs_.listIterator(); i.hasNext();)
         {
             if(i.next() == oldChild)
diff --git a/src/main/java/org/sablecc/sablecc/node/ATransition.java b/src/main/java/org/sablecc/sablecc/node/ATransition.java
index efc2ecb8a722002ea320ef0a7b9e50dca51167cf..0e5499fb16083f7fb555f486833e752fc9bf4d8e 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATransition.java
@@ -10,13 +10,11 @@ public final class ATransition extends PTransition
 
     public ATransition()
     {
-        // Constructor
     }
 
     public ATransition(
           TId _id_)
     {
-        // Constructor
         setId(_id_);
 
     }
@@ -74,7 +72,6 @@ public final class ATransition extends PTransition
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._id_ == child)
         {
             this._id_ = null;
@@ -87,7 +84,6 @@ public final class ATransition extends PTransition
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._id_ == oldChild)
         {
             setId((TId) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/AUnExp.java b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
index 30185f0ab743acb499845cb39bb5e8873b78e709..6d7d40d738e775435094d94a6065bcae51b2aa65 100644
--- a/src/main/java/org/sablecc/sablecc/node/AUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
@@ -11,14 +11,12 @@ public final class AUnExp extends PUnExp
 
     public AUnExp()
     {
-        // Constructor
     }
 
     public AUnExp(
           PBasic _basic_,
           PUnOp _unOp_)
     {
-        // Constructor
         setBasic(_basic_);
 
         setUnOp(_unOp_);
@@ -105,7 +103,6 @@ public final class AUnExp extends PUnExp
     @Override
     void removeChild(Node child)
     {
-        // Remove child
         if(this._basic_ == child)
         {
             this._basic_ = null;
@@ -124,7 +121,6 @@ public final class AUnExp extends PUnExp
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
         if(this._basic_ == oldChild)
         {
             setBasic((PBasic) newChild);
diff --git a/src/main/java/org/sablecc/sablecc/node/Start.java b/src/main/java/org/sablecc/sablecc/node/Start.java
index f9e230a62e8a6a7916ef4290b0f8aae8341c03bd..751cb6f4ecd20d226a1d28f993d4b4846325ee64 100644
--- a/src/main/java/org/sablecc/sablecc/node/Start.java
+++ b/src/main/java/org/sablecc/sablecc/node/Start.java
@@ -10,9 +10,7 @@ public final class Start extends Node
     private EOF _eof_;
 
     public Start()
-    {
-        // Empty body
-    }
+    {}
 
     public Start(
         PGrammar _pGrammar_,
diff --git a/src/main/java/org/sablecc/sablecc/node/Switch.java b/src/main/java/org/sablecc/sablecc/node/Switch.java
index ca792e67ce93d850d977db6e8a7e3023818b68d6..121bb952052e2877a5bc7570f706ae4663fa2a46 100644
--- a/src/main/java/org/sablecc/sablecc/node/Switch.java
+++ b/src/main/java/org/sablecc/sablecc/node/Switch.java
@@ -3,6 +3,4 @@
 package org.sablecc.sablecc.node;
 
 public interface Switch
-{
-    // Empty body
-}
+{}
diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index 992afd4ecfdc014ed141f4c19f41e8e0aa3d1f0d..626967b1bd1e1c6a2cb310dc99b65ebb162a1b96 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -6,33 +6,26 @@ import java.io.DataInputStream;
 import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
-import java.util.Map;
 
 import de.hhu.stups.sablecc.patch.IParser;
-import de.hhu.stups.sablecc.patch.IToken;
 import de.hhu.stups.sablecc.patch.PositionedNode;
+import de.hhu.stups.sablecc.patch.SourcePosition;
 
 import org.sablecc.sablecc.lexer.Lexer;
 import org.sablecc.sablecc.lexer.LexerException;
 import org.sablecc.sablecc.node.*;
 
-@SuppressWarnings({"deprecation", "rawtypes", "unchecked", "unused"}) // getMapping() is deprecated, but the generated parser still populates it for compatibility
+@SuppressWarnings({"unchecked", "unused"})
 public class Parser implements IParser
 {
-    protected List<Object> nodeList;
-
     private final Lexer lexer;
     private final ListIterator<State> stack = new LinkedList<State>().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;
@@ -44,17 +37,7 @@ public class Parser implements IParser
         this.lexer = lexer;
     }
 
-    @Deprecated
-    private Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> mapping = new HashMap<>();
-    /**
-     * @deprecated All generated token classes store their own position info.
-     *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
-     */
-    @Deprecated
-    @Override
-    public Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> getMapping() { return this.mapping; }
-
-    private void checkResult(Object elementToCheck, List<Object> beginNodeList, List<Object> endNodeList) {
+    private void checkResult(Object elementToCheck, List<?> beginNodeList, List<?> endNodeList) {
         if (elementToCheck instanceof List<?>) {
             /*
              * special case: this is a list of nodes, for example an identifier
@@ -62,50 +45,45 @@ public class Parser implements IParser
              * added to it
              */
             final List<?> nodeList = (List<?>) elementToCheck;
-
-            if (nodeList.size() > 0) {
-                elementToCheck = nodeList.get(nodeList.size() - 1);
-            } else {
+            if (nodeList.isEmpty()) {
                 // no positions for empty lists...
                 return;
             }
+            elementToCheck = nodeList.get(nodeList.size() - 1);
         }
 
         final PositionedNode node = (PositionedNode) elementToCheck;
 
-        if (!this.getMapping().containsKey(node)) {
+        // Add node positions if they haven't been calculated yet.
+        // Tokens are skipped because they always have positions -
+        // this avoids creating unnecessary SourcePosition objects.
+        if (!(node instanceof Token) && node.getStartPos() == null) {
+            assert node.getEndPos() == null;
             PositionedNode beginNode = findBeginNode(beginNodeList);
-            final int begin;
             if (beginNode == null) {
                 /*
                  * 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.
+                 * of the whole parse unit. Then the start pos is the first char.
                  */
-                beginNode = (PositionedNode)this.lexer.getTokenList().get(0);
-                begin = 0;
+                node.setStartPos(new SourcePosition(1, 1));
             } else {
-                begin = findBeginPos(beginNode);
+                node.setStartPos(beginNode.getStartPos());
             }
 
             PositionedNode endNode = findEndNode(endNodeList);
-            int end = findEndPos(endNode);
-            if (end == -1) end = begin;
-            final de.hhu.stups.sablecc.patch.SourcecodeRange range = new de.hhu.stups.sablecc.patch.SourcecodeRange(begin, end);
-
-            this.getMapping().put(node, range);
-
-            node.setStartPos(beginNode.getStartPos());
             node.setEndPos(endNode.getEndPos());
+        } else {
+            assert node.getEndPos() != null;
         }
     }
 
-    private PositionedNode findBeginNode(final List<Object> list) {
+    private PositionedNode findBeginNode(final List<?> list) {
         Object first = list.get(0);
         if (first instanceof List<?>) {
             List<?> list2 = (List<?>) first;
 
-            if (list2.size() > 0) {
+            if (!list2.isEmpty()) {
                 return (PositionedNode)list2.get(0);
             } else {
                 return null;
@@ -115,15 +93,7 @@ public class Parser implements IParser
         return (PositionedNode)first;
     }
 
-    private int findBeginPos(final PositionedNode node) {
-        if (node instanceof IToken) {
-            return findIndex((IToken) node);
-        }
-
-        return this.getMapping().get(node).getBeginIndex();
-    }
-
-    private PositionedNode findEndNode(final List<Object> list) {
+    private PositionedNode findEndNode(final List<?> list) {
         Object last = list.get(list.size() - 1);
         if (last instanceof List<?>) {
             final List<?> list2 = (List<?>) last;
@@ -133,67 +103,42 @@ public class Parser implements IParser
         return (PositionedNode)last;
     }
 
-    private int findEndPos(final PositionedNode node) {
-        if (node instanceof IToken) {
-            return findIndex((IToken) node);
-        }
-
-        final de.hhu.stups.sablecc.patch.SourcecodeRange item = this.getMapping().get(node);
-        if (item == null) {
-            return -1;
-        }
-        return item.getEndIndex();
-    }
-
-    private int findIndex(final IToken token) {
-        final List<IToken> list = this.lexer.getTokenList();
-
-        for (int i = list.size() - 1; i >= 0; i--) {
-            if (list.get(i) == token) {
-                return i;
-            }
-        }
-
-        return -1;
-    }
-
-    private void push(int numstate, List<Object> listNode) throws ParserException, LexerException, IOException
+    private void push(int numstate, List<?> listNode)
     {
-        this.nodeList = listNode;
-
         if(!this.stack.hasNext())
         {
-            this.stack.add(new State(numstate, this.nodeList));
+            this.stack.add(new State(numstate, listNode));
             return;
         }
 
         State s = this.stack.next();
         s.state = numstate;
-        s.nodes = this.nodeList;
+        s.nodes = listNode;
     }
 
     private int goTo(int index)
     {
         int state = state();
+        int[][] table = gotoTable[index];
         int low = 1;
-        int high = gotoTable[index].length - 1;
-        int value = gotoTable[index][0][1];
+        int high = table.length - 1;
+        int value = table[0][1];
 
         while(low <= high)
         {
             int middle = (low + high) >>> 1;
 
-            if(state < gotoTable[index][middle][0])
+            if(state < table[middle][0])
             {
                 high = middle - 1;
             }
-            else if(state > gotoTable[index][middle][0])
+            else if(state > table[middle][0])
             {
                 low = middle + 1;
             }
             else
             {
-                value = gotoTable[index][middle][1];
+                value = table[middle][1];
                 break;
             }
         }
@@ -208,7 +153,7 @@ public class Parser implements IParser
         return s.state;
     }
 
-    private List<Object> pop()
+    private List<?> pop()
     {
         return this.stack.previous().nodes;
     }
@@ -223,1671 +168,1669 @@ public class Parser implements IParser
 
     public Start parse() throws ParserException, LexerException, IOException
     {
-        this.getMapping().clear();
-
         push(0, null);
         while(true)
         {
-            while(index(this.lexer.peek()) == -1)
+            Token lastToken = this.lexer.peek();
+            int index = index(lastToken);
+            while(index == -1)
             {
                 // this is an ignored token
                 this.lexer.next();
+                lastToken = this.lexer.peek();
+                index = index(lastToken);
             }
 
-            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 state = state();
+            int[][] table = actionTable[state];
+            int action = table[0][1];
+            int destination = table[0][2];
 
             int low = 1;
-            int high = Parser.actionTable[state()].length - 1;
+            int high = table.length - 1;
 
             while(low <= high)
             {
                 int middle = (low + high) >>> 1;
 
-                if(index < Parser.actionTable[state()][middle][0])
+                if(index < table[middle][0])
                 {
                     high = middle - 1;
                 }
-                else if(index > Parser.actionTable[state()][middle][0])
+                else if(index > table[middle][0])
                 {
                     low = middle + 1;
                 }
                 else
                 {
-                    this.action[0] = Parser.actionTable[state()][middle][1];
-                    this.action[1] = Parser.actionTable[state()][middle][2];
+                    action = table[middle][1];
+                    destination = table[middle][2];
                     break;
                 }
             }
 
-            switch(this.action[0])
+            switch(action)
             {
                 case SHIFT:
                 {
-                    List<Object> list = new ArrayList<Object>();
-                    list.add(this.lexer.next());
-                    push(this.action[1], list);
+                    List<?> list = Collections.singletonList(this.lexer.next());
+                    push(destination, list);
                 }
                 break;
                 case REDUCE:
-                    switch(this.action[1])
+                    switch(destination)
                     {
                         case 0: /* reduce AAgrammar1Grammar */
                         {
-                            List<Object> list = new0();
+                            List<?> list = new0();
                             push(goTo(0), list);
                         }
                         break;
                         case 1: /* reduce AAgrammar2Grammar */
                         {
-                            List<Object> list = new1();
+                            List<?> list = new1();
                             push(goTo(0), list);
                         }
                         break;
                         case 2: /* reduce AAgrammar3Grammar */
                         {
-                            List<Object> list = new2();
+                            List<?> list = new2();
                             push(goTo(0), list);
                         }
                         break;
                         case 3: /* reduce AAgrammar4Grammar */
                         {
-                            List<Object> list = new3();
+                            List<?> list = new3();
                             push(goTo(0), list);
                         }
                         break;
                         case 4: /* reduce AAgrammar5Grammar */
                         {
-                            List<Object> list = new4();
+                            List<?> list = new4();
                             push(goTo(0), list);
                         }
                         break;
                         case 5: /* reduce AAgrammar6Grammar */
                         {
-                            List<Object> list = new5();
+                            List<?> list = new5();
                             push(goTo(0), list);
                         }
                         break;
                         case 6: /* reduce AAgrammar7Grammar */
                         {
-                            List<Object> list = new6();
+                            List<?> list = new6();
                             push(goTo(0), list);
                         }
                         break;
                         case 7: /* reduce AAgrammar8Grammar */
                         {
-                            List<Object> list = new7();
+                            List<?> list = new7();
                             push(goTo(0), list);
                         }
                         break;
                         case 8: /* reduce AAgrammar9Grammar */
                         {
-                            List<Object> list = new8();
+                            List<?> list = new8();
                             push(goTo(0), list);
                         }
                         break;
                         case 9: /* reduce AAgrammar10Grammar */
                         {
-                            List<Object> list = new9();
+                            List<?> list = new9();
                             push(goTo(0), list);
                         }
                         break;
                         case 10: /* reduce AAgrammar11Grammar */
                         {
-                            List<Object> list = new10();
+                            List<?> list = new10();
                             push(goTo(0), list);
                         }
                         break;
                         case 11: /* reduce AAgrammar12Grammar */
                         {
-                            List<Object> list = new11();
+                            List<?> list = new11();
                             push(goTo(0), list);
                         }
                         break;
                         case 12: /* reduce AAgrammar13Grammar */
                         {
-                            List<Object> list = new12();
+                            List<?> list = new12();
                             push(goTo(0), list);
                         }
                         break;
                         case 13: /* reduce AAgrammar14Grammar */
                         {
-                            List<Object> list = new13();
+                            List<?> list = new13();
                             push(goTo(0), list);
                         }
                         break;
                         case 14: /* reduce AAgrammar15Grammar */
                         {
-                            List<Object> list = new14();
+                            List<?> list = new14();
                             push(goTo(0), list);
                         }
                         break;
                         case 15: /* reduce AAgrammar16Grammar */
                         {
-                            List<Object> list = new15();
+                            List<?> list = new15();
                             push(goTo(0), list);
                         }
                         break;
                         case 16: /* reduce AAgrammar17Grammar */
                         {
-                            List<Object> list = new16();
+                            List<?> list = new16();
                             push(goTo(0), list);
                         }
                         break;
                         case 17: /* reduce AAgrammar18Grammar */
                         {
-                            List<Object> list = new17();
+                            List<?> list = new17();
                             push(goTo(0), list);
                         }
                         break;
                         case 18: /* reduce AAgrammar19Grammar */
                         {
-                            List<Object> list = new18();
+                            List<?> list = new18();
                             push(goTo(0), list);
                         }
                         break;
                         case 19: /* reduce AAgrammar20Grammar */
                         {
-                            List<Object> list = new19();
+                            List<?> list = new19();
                             push(goTo(0), list);
                         }
                         break;
                         case 20: /* reduce AAgrammar21Grammar */
                         {
-                            List<Object> list = new20();
+                            List<?> list = new20();
                             push(goTo(0), list);
                         }
                         break;
                         case 21: /* reduce AAgrammar22Grammar */
                         {
-                            List<Object> list = new21();
+                            List<?> list = new21();
                             push(goTo(0), list);
                         }
                         break;
                         case 22: /* reduce AAgrammar23Grammar */
                         {
-                            List<Object> list = new22();
+                            List<?> list = new22();
                             push(goTo(0), list);
                         }
                         break;
                         case 23: /* reduce AAgrammar24Grammar */
                         {
-                            List<Object> list = new23();
+                            List<?> list = new23();
                             push(goTo(0), list);
                         }
                         break;
                         case 24: /* reduce AAgrammar25Grammar */
                         {
-                            List<Object> list = new24();
+                            List<?> list = new24();
                             push(goTo(0), list);
                         }
                         break;
                         case 25: /* reduce AAgrammar26Grammar */
                         {
-                            List<Object> list = new25();
+                            List<?> list = new25();
                             push(goTo(0), list);
                         }
                         break;
                         case 26: /* reduce AAgrammar27Grammar */
                         {
-                            List<Object> list = new26();
+                            List<?> list = new26();
                             push(goTo(0), list);
                         }
                         break;
                         case 27: /* reduce AAgrammar28Grammar */
                         {
-                            List<Object> list = new27();
+                            List<?> list = new27();
                             push(goTo(0), list);
                         }
                         break;
                         case 28: /* reduce AAgrammar29Grammar */
                         {
-                            List<Object> list = new28();
+                            List<?> list = new28();
                             push(goTo(0), list);
                         }
                         break;
                         case 29: /* reduce AAgrammar30Grammar */
                         {
-                            List<Object> list = new29();
+                            List<?> list = new29();
                             push(goTo(0), list);
                         }
                         break;
                         case 30: /* reduce AAgrammar31Grammar */
                         {
-                            List<Object> list = new30();
+                            List<?> list = new30();
                             push(goTo(0), list);
                         }
                         break;
                         case 31: /* reduce AAgrammar32Grammar */
                         {
-                            List<Object> list = new31();
+                            List<?> list = new31();
                             push(goTo(0), list);
                         }
                         break;
                         case 32: /* reduce AAgrammar33Grammar */
                         {
-                            List<Object> list = new32();
+                            List<?> list = new32();
                             push(goTo(0), list);
                         }
                         break;
                         case 33: /* reduce AAgrammar34Grammar */
                         {
-                            List<Object> list = new33();
+                            List<?> list = new33();
                             push(goTo(0), list);
                         }
                         break;
                         case 34: /* reduce AAgrammar35Grammar */
                         {
-                            List<Object> list = new34();
+                            List<?> list = new34();
                             push(goTo(0), list);
                         }
                         break;
                         case 35: /* reduce AAgrammar36Grammar */
                         {
-                            List<Object> list = new35();
+                            List<?> list = new35();
                             push(goTo(0), list);
                         }
                         break;
                         case 36: /* reduce AAgrammar37Grammar */
                         {
-                            List<Object> list = new36();
+                            List<?> list = new36();
                             push(goTo(0), list);
                         }
                         break;
                         case 37: /* reduce AAgrammar38Grammar */
                         {
-                            List<Object> list = new37();
+                            List<?> list = new37();
                             push(goTo(0), list);
                         }
                         break;
                         case 38: /* reduce AAgrammar39Grammar */
                         {
-                            List<Object> list = new38();
+                            List<?> list = new38();
                             push(goTo(0), list);
                         }
                         break;
                         case 39: /* reduce AAgrammar40Grammar */
                         {
-                            List<Object> list = new39();
+                            List<?> list = new39();
                             push(goTo(0), list);
                         }
                         break;
                         case 40: /* reduce AAgrammar41Grammar */
                         {
-                            List<Object> list = new40();
+                            List<?> list = new40();
                             push(goTo(0), list);
                         }
                         break;
                         case 41: /* reduce AAgrammar42Grammar */
                         {
-                            List<Object> list = new41();
+                            List<?> list = new41();
                             push(goTo(0), list);
                         }
                         break;
                         case 42: /* reduce AAgrammar43Grammar */
                         {
-                            List<Object> list = new42();
+                            List<?> list = new42();
                             push(goTo(0), list);
                         }
                         break;
                         case 43: /* reduce AAgrammar44Grammar */
                         {
-                            List<Object> list = new43();
+                            List<?> list = new43();
                             push(goTo(0), list);
                         }
                         break;
                         case 44: /* reduce AAgrammar45Grammar */
                         {
-                            List<Object> list = new44();
+                            List<?> list = new44();
                             push(goTo(0), list);
                         }
                         break;
                         case 45: /* reduce AAgrammar46Grammar */
                         {
-                            List<Object> list = new45();
+                            List<?> list = new45();
                             push(goTo(0), list);
                         }
                         break;
                         case 46: /* reduce AAgrammar47Grammar */
                         {
-                            List<Object> list = new46();
+                            List<?> list = new46();
                             push(goTo(0), list);
                         }
                         break;
                         case 47: /* reduce AAgrammar48Grammar */
                         {
-                            List<Object> list = new47();
+                            List<?> list = new47();
                             push(goTo(0), list);
                         }
                         break;
                         case 48: /* reduce AAgrammar49Grammar */
                         {
-                            List<Object> list = new48();
+                            List<?> list = new48();
                             push(goTo(0), list);
                         }
                         break;
                         case 49: /* reduce AAgrammar50Grammar */
                         {
-                            List<Object> list = new49();
+                            List<?> list = new49();
                             push(goTo(0), list);
                         }
                         break;
                         case 50: /* reduce AAgrammar51Grammar */
                         {
-                            List<Object> list = new50();
+                            List<?> list = new50();
                             push(goTo(0), list);
                         }
                         break;
                         case 51: /* reduce AAgrammar52Grammar */
                         {
-                            List<Object> list = new51();
+                            List<?> list = new51();
                             push(goTo(0), list);
                         }
                         break;
                         case 52: /* reduce AAgrammar53Grammar */
                         {
-                            List<Object> list = new52();
+                            List<?> list = new52();
                             push(goTo(0), list);
                         }
                         break;
                         case 53: /* reduce AAgrammar54Grammar */
                         {
-                            List<Object> list = new53();
+                            List<?> list = new53();
                             push(goTo(0), list);
                         }
                         break;
                         case 54: /* reduce AAgrammar55Grammar */
                         {
-                            List<Object> list = new54();
+                            List<?> list = new54();
                             push(goTo(0), list);
                         }
                         break;
                         case 55: /* reduce AAgrammar56Grammar */
                         {
-                            List<Object> list = new55();
+                            List<?> list = new55();
                             push(goTo(0), list);
                         }
                         break;
                         case 56: /* reduce AAgrammar57Grammar */
                         {
-                            List<Object> list = new56();
+                            List<?> list = new56();
                             push(goTo(0), list);
                         }
                         break;
                         case 57: /* reduce AAgrammar58Grammar */
                         {
-                            List<Object> list = new57();
+                            List<?> list = new57();
                             push(goTo(0), list);
                         }
                         break;
                         case 58: /* reduce AAgrammar59Grammar */
                         {
-                            List<Object> list = new58();
+                            List<?> list = new58();
                             push(goTo(0), list);
                         }
                         break;
                         case 59: /* reduce AAgrammar60Grammar */
                         {
-                            List<Object> list = new59();
+                            List<?> list = new59();
                             push(goTo(0), list);
                         }
                         break;
                         case 60: /* reduce AAgrammar61Grammar */
                         {
-                            List<Object> list = new60();
+                            List<?> list = new60();
                             push(goTo(0), list);
                         }
                         break;
                         case 61: /* reduce AAgrammar62Grammar */
                         {
-                            List<Object> list = new61();
+                            List<?> list = new61();
                             push(goTo(0), list);
                         }
                         break;
                         case 62: /* reduce AAgrammar63Grammar */
                         {
-                            List<Object> list = new62();
+                            List<?> list = new62();
                             push(goTo(0), list);
                         }
                         break;
                         case 63: /* reduce AAgrammar64Grammar */
                         {
-                            List<Object> list = new63();
+                            List<?> list = new63();
                             push(goTo(0), list);
                         }
                         break;
                         case 64: /* reduce AAgrammar65Grammar */
                         {
-                            List<Object> list = new64();
+                            List<?> list = new64();
                             push(goTo(0), list);
                         }
                         break;
                         case 65: /* reduce AAgrammar66Grammar */
                         {
-                            List<Object> list = new65();
+                            List<?> list = new65();
                             push(goTo(0), list);
                         }
                         break;
                         case 66: /* reduce AAgrammar67Grammar */
                         {
-                            List<Object> list = new66();
+                            List<?> list = new66();
                             push(goTo(0), list);
                         }
                         break;
                         case 67: /* reduce AAgrammar68Grammar */
                         {
-                            List<Object> list = new67();
+                            List<?> list = new67();
                             push(goTo(0), list);
                         }
                         break;
                         case 68: /* reduce AAgrammar69Grammar */
                         {
-                            List<Object> list = new68();
+                            List<?> list = new68();
                             push(goTo(0), list);
                         }
                         break;
                         case 69: /* reduce AAgrammar70Grammar */
                         {
-                            List<Object> list = new69();
+                            List<?> list = new69();
                             push(goTo(0), list);
                         }
                         break;
                         case 70: /* reduce AAgrammar71Grammar */
                         {
-                            List<Object> list = new70();
+                            List<?> list = new70();
                             push(goTo(0), list);
                         }
                         break;
                         case 71: /* reduce AAgrammar72Grammar */
                         {
-                            List<Object> list = new71();
+                            List<?> list = new71();
                             push(goTo(0), list);
                         }
                         break;
                         case 72: /* reduce AAgrammar73Grammar */
                         {
-                            List<Object> list = new72();
+                            List<?> list = new72();
                             push(goTo(0), list);
                         }
                         break;
                         case 73: /* reduce AAgrammar74Grammar */
                         {
-                            List<Object> list = new73();
+                            List<?> list = new73();
                             push(goTo(0), list);
                         }
                         break;
                         case 74: /* reduce AAgrammar75Grammar */
                         {
-                            List<Object> list = new74();
+                            List<?> list = new74();
                             push(goTo(0), list);
                         }
                         break;
                         case 75: /* reduce AAgrammar76Grammar */
                         {
-                            List<Object> list = new75();
+                            List<?> list = new75();
                             push(goTo(0), list);
                         }
                         break;
                         case 76: /* reduce AAgrammar77Grammar */
                         {
-                            List<Object> list = new76();
+                            List<?> list = new76();
                             push(goTo(0), list);
                         }
                         break;
                         case 77: /* reduce AAgrammar78Grammar */
                         {
-                            List<Object> list = new77();
+                            List<?> list = new77();
                             push(goTo(0), list);
                         }
                         break;
                         case 78: /* reduce AAgrammar79Grammar */
                         {
-                            List<Object> list = new78();
+                            List<?> list = new78();
                             push(goTo(0), list);
                         }
                         break;
                         case 79: /* reduce AAgrammar80Grammar */
                         {
-                            List<Object> list = new79();
+                            List<?> list = new79();
                             push(goTo(0), list);
                         }
                         break;
                         case 80: /* reduce AAgrammar81Grammar */
                         {
-                            List<Object> list = new80();
+                            List<?> list = new80();
                             push(goTo(0), list);
                         }
                         break;
                         case 81: /* reduce AAgrammar82Grammar */
                         {
-                            List<Object> list = new81();
+                            List<?> list = new81();
                             push(goTo(0), list);
                         }
                         break;
                         case 82: /* reduce AAgrammar83Grammar */
                         {
-                            List<Object> list = new82();
+                            List<?> list = new82();
                             push(goTo(0), list);
                         }
                         break;
                         case 83: /* reduce AAgrammar84Grammar */
                         {
-                            List<Object> list = new83();
+                            List<?> list = new83();
                             push(goTo(0), list);
                         }
                         break;
                         case 84: /* reduce AAgrammar85Grammar */
                         {
-                            List<Object> list = new84();
+                            List<?> list = new84();
                             push(goTo(0), list);
                         }
                         break;
                         case 85: /* reduce AAgrammar86Grammar */
                         {
-                            List<Object> list = new85();
+                            List<?> list = new85();
                             push(goTo(0), list);
                         }
                         break;
                         case 86: /* reduce AAgrammar87Grammar */
                         {
-                            List<Object> list = new86();
+                            List<?> list = new86();
                             push(goTo(0), list);
                         }
                         break;
                         case 87: /* reduce AAgrammar88Grammar */
                         {
-                            List<Object> list = new87();
+                            List<?> list = new87();
                             push(goTo(0), list);
                         }
                         break;
                         case 88: /* reduce AAgrammar89Grammar */
                         {
-                            List<Object> list = new88();
+                            List<?> list = new88();
                             push(goTo(0), list);
                         }
                         break;
                         case 89: /* reduce AAgrammar90Grammar */
                         {
-                            List<Object> list = new89();
+                            List<?> list = new89();
                             push(goTo(0), list);
                         }
                         break;
                         case 90: /* reduce AAgrammar91Grammar */
                         {
-                            List<Object> list = new90();
+                            List<?> list = new90();
                             push(goTo(0), list);
                         }
                         break;
                         case 91: /* reduce AAgrammar92Grammar */
                         {
-                            List<Object> list = new91();
+                            List<?> list = new91();
                             push(goTo(0), list);
                         }
                         break;
                         case 92: /* reduce AAgrammar93Grammar */
                         {
-                            List<Object> list = new92();
+                            List<?> list = new92();
                             push(goTo(0), list);
                         }
                         break;
                         case 93: /* reduce AAgrammar94Grammar */
                         {
-                            List<Object> list = new93();
+                            List<?> list = new93();
                             push(goTo(0), list);
                         }
                         break;
                         case 94: /* reduce AAgrammar95Grammar */
                         {
-                            List<Object> list = new94();
+                            List<?> list = new94();
                             push(goTo(0), list);
                         }
                         break;
                         case 95: /* reduce AAgrammar96Grammar */
                         {
-                            List<Object> list = new95();
+                            List<?> list = new95();
                             push(goTo(0), list);
                         }
                         break;
                         case 96: /* reduce AAgrammar97Grammar */
                         {
-                            List<Object> list = new96();
+                            List<?> list = new96();
                             push(goTo(0), list);
                         }
                         break;
                         case 97: /* reduce AAgrammar98Grammar */
                         {
-                            List<Object> list = new97();
+                            List<?> list = new97();
                             push(goTo(0), list);
                         }
                         break;
                         case 98: /* reduce AAgrammar99Grammar */
                         {
-                            List<Object> list = new98();
+                            List<?> list = new98();
                             push(goTo(0), list);
                         }
                         break;
                         case 99: /* reduce AAgrammar100Grammar */
                         {
-                            List<Object> list = new99();
+                            List<?> list = new99();
                             push(goTo(0), list);
                         }
                         break;
                         case 100: /* reduce AAgrammar101Grammar */
                         {
-                            List<Object> list = new100();
+                            List<?> list = new100();
                             push(goTo(0), list);
                         }
                         break;
                         case 101: /* reduce AAgrammar102Grammar */
                         {
-                            List<Object> list = new101();
+                            List<?> list = new101();
                             push(goTo(0), list);
                         }
                         break;
                         case 102: /* reduce AAgrammar103Grammar */
                         {
-                            List<Object> list = new102();
+                            List<?> list = new102();
                             push(goTo(0), list);
                         }
                         break;
                         case 103: /* reduce AAgrammar104Grammar */
                         {
-                            List<Object> list = new103();
+                            List<?> list = new103();
                             push(goTo(0), list);
                         }
                         break;
                         case 104: /* reduce AAgrammar105Grammar */
                         {
-                            List<Object> list = new104();
+                            List<?> list = new104();
                             push(goTo(0), list);
                         }
                         break;
                         case 105: /* reduce AAgrammar106Grammar */
                         {
-                            List<Object> list = new105();
+                            List<?> list = new105();
                             push(goTo(0), list);
                         }
                         break;
                         case 106: /* reduce AAgrammar107Grammar */
                         {
-                            List<Object> list = new106();
+                            List<?> list = new106();
                             push(goTo(0), list);
                         }
                         break;
                         case 107: /* reduce AAgrammar108Grammar */
                         {
-                            List<Object> list = new107();
+                            List<?> list = new107();
                             push(goTo(0), list);
                         }
                         break;
                         case 108: /* reduce AAgrammar109Grammar */
                         {
-                            List<Object> list = new108();
+                            List<?> list = new108();
                             push(goTo(0), list);
                         }
                         break;
                         case 109: /* reduce AAgrammar110Grammar */
                         {
-                            List<Object> list = new109();
+                            List<?> list = new109();
                             push(goTo(0), list);
                         }
                         break;
                         case 110: /* reduce AAgrammar111Grammar */
                         {
-                            List<Object> list = new110();
+                            List<?> list = new110();
                             push(goTo(0), list);
                         }
                         break;
                         case 111: /* reduce AAgrammar112Grammar */
                         {
-                            List<Object> list = new111();
+                            List<?> list = new111();
                             push(goTo(0), list);
                         }
                         break;
                         case 112: /* reduce AAgrammar113Grammar */
                         {
-                            List<Object> list = new112();
+                            List<?> list = new112();
                             push(goTo(0), list);
                         }
                         break;
                         case 113: /* reduce AAgrammar114Grammar */
                         {
-                            List<Object> list = new113();
+                            List<?> list = new113();
                             push(goTo(0), list);
                         }
                         break;
                         case 114: /* reduce AAgrammar115Grammar */
                         {
-                            List<Object> list = new114();
+                            List<?> list = new114();
                             push(goTo(0), list);
                         }
                         break;
                         case 115: /* reduce AAgrammar116Grammar */
                         {
-                            List<Object> list = new115();
+                            List<?> list = new115();
                             push(goTo(0), list);
                         }
                         break;
                         case 116: /* reduce AAgrammar117Grammar */
                         {
-                            List<Object> list = new116();
+                            List<?> list = new116();
                             push(goTo(0), list);
                         }
                         break;
                         case 117: /* reduce AAgrammar118Grammar */
                         {
-                            List<Object> list = new117();
+                            List<?> list = new117();
                             push(goTo(0), list);
                         }
                         break;
                         case 118: /* reduce AAgrammar119Grammar */
                         {
-                            List<Object> list = new118();
+                            List<?> list = new118();
                             push(goTo(0), list);
                         }
                         break;
                         case 119: /* reduce AAgrammar120Grammar */
                         {
-                            List<Object> list = new119();
+                            List<?> list = new119();
                             push(goTo(0), list);
                         }
                         break;
                         case 120: /* reduce AAgrammar121Grammar */
                         {
-                            List<Object> list = new120();
+                            List<?> list = new120();
                             push(goTo(0), list);
                         }
                         break;
                         case 121: /* reduce AAgrammar122Grammar */
                         {
-                            List<Object> list = new121();
+                            List<?> list = new121();
                             push(goTo(0), list);
                         }
                         break;
                         case 122: /* reduce AAgrammar123Grammar */
                         {
-                            List<Object> list = new122();
+                            List<?> list = new122();
                             push(goTo(0), list);
                         }
                         break;
                         case 123: /* reduce AAgrammar124Grammar */
                         {
-                            List<Object> list = new123();
+                            List<?> list = new123();
                             push(goTo(0), list);
                         }
                         break;
                         case 124: /* reduce AAgrammar125Grammar */
                         {
-                            List<Object> list = new124();
+                            List<?> list = new124();
                             push(goTo(0), list);
                         }
                         break;
                         case 125: /* reduce AAgrammar126Grammar */
                         {
-                            List<Object> list = new125();
+                            List<?> list = new125();
                             push(goTo(0), list);
                         }
                         break;
                         case 126: /* reduce AAgrammar127Grammar */
                         {
-                            List<Object> list = new126();
+                            List<?> list = new126();
                             push(goTo(0), list);
                         }
                         break;
                         case 127: /* reduce AAgrammar128Grammar */
                         {
-                            List<Object> list = new127();
+                            List<?> list = new127();
                             push(goTo(0), list);
                         }
                         break;
                         case 128: /* reduce APackage */
                         {
-                            List<Object> list = new128();
+                            List<?> list = new128();
                             push(goTo(1), list);
                         }
                         break;
                         case 129: /* reduce AApkgname1PkgName */
                         {
-                            List<Object> list = new129();
+                            List<?> list = new129();
                             push(goTo(2), list);
                         }
                         break;
                         case 130: /* reduce AApkgname2PkgName */
                         {
-                            List<Object> list = new130();
+                            List<?> list = new130();
                             push(goTo(2), list);
                         }
                         break;
                         case 131: /* reduce APkgNameTail */
                         {
-                            List<Object> list = new131();
+                            List<?> list = new131();
                             push(goTo(3), list);
                         }
                         break;
                         case 132: /* reduce AHelpers */
                         {
-                            List<Object> list = new132();
+                            List<?> list = new132();
                             push(goTo(4), list);
                         }
                         break;
                         case 133: /* reduce AHelperDef */
                         {
-                            List<Object> list = new133();
+                            List<?> list = new133();
                             push(goTo(5), list);
                         }
                         break;
                         case 134: /* reduce AStates */
                         {
-                            List<Object> list = new134();
+                            List<?> list = new134();
                             push(goTo(6), list);
                         }
                         break;
                         case 135: /* reduce AAidlist1IdList */
                         {
-                            List<Object> list = new135();
+                            List<?> list = new135();
                             push(goTo(7), list);
                         }
                         break;
                         case 136: /* reduce AAidlist2IdList */
                         {
-                            List<Object> list = new136();
+                            List<?> list = new136();
                             push(goTo(7), list);
                         }
                         break;
                         case 137: /* reduce AIdListTail */
                         {
-                            List<Object> list = new137();
+                            List<?> list = new137();
                             push(goTo(8), list);
                         }
                         break;
                         case 138: /* reduce ATokens */
                         {
-                            List<Object> list = new138();
+                            List<?> list = new138();
                             push(goTo(9), list);
                         }
                         break;
                         case 139: /* reduce AAtokendef1TokenDef */
                         {
-                            List<Object> list = new139();
+                            List<?> list = new139();
                             push(goTo(10), list);
                         }
                         break;
                         case 140: /* reduce AAtokendef2TokenDef */
                         {
-                            List<Object> list = new140();
+                            List<?> list = new140();
                             push(goTo(10), list);
                         }
                         break;
                         case 141: /* reduce AAtokendef3TokenDef */
                         {
-                            List<Object> list = new141();
+                            List<?> list = new141();
                             push(goTo(10), list);
                         }
                         break;
                         case 142: /* reduce AAtokendef4TokenDef */
                         {
-                            List<Object> list = new142();
+                            List<?> list = new142();
                             push(goTo(10), list);
                         }
                         break;
                         case 143: /* reduce AAstatelist1StateList */
                         {
-                            List<Object> list = new143();
+                            List<?> list = new143();
                             push(goTo(11), list);
                         }
                         break;
                         case 144: /* reduce AAstatelist2StateList */
                         {
-                            List<Object> list = new144();
+                            List<?> list = new144();
                             push(goTo(11), list);
                         }
                         break;
                         case 145: /* reduce AAstatelist3StateList */
                         {
-                            List<Object> list = new145();
+                            List<?> list = new145();
                             push(goTo(11), list);
                         }
                         break;
                         case 146: /* reduce AAstatelist4StateList */
                         {
-                            List<Object> list = new146();
+                            List<?> list = new146();
                             push(goTo(11), list);
                         }
                         break;
                         case 147: /* reduce AAstatelisttail1StateListTail */
                         {
-                            List<Object> list = new147();
+                            List<?> list = new147();
                             push(goTo(12), list);
                         }
                         break;
                         case 148: /* reduce AAstatelisttail2StateListTail */
                         {
-                            List<Object> list = new148();
+                            List<?> list = new148();
                             push(goTo(12), list);
                         }
                         break;
                         case 149: /* reduce ATransition */
                         {
-                            List<Object> list = new149();
+                            List<?> list = new149();
                             push(goTo(13), list);
                         }
                         break;
                         case 150: /* reduce AAigntokens1IgnTokens */
                         {
-                            List<Object> list = new150();
+                            List<?> list = new150();
                             push(goTo(14), list);
                         }
                         break;
                         case 151: /* reduce AAigntokens2IgnTokens */
                         {
-                            List<Object> list = new151();
+                            List<?> list = new151();
                             push(goTo(14), list);
                         }
                         break;
                         case 152: /* reduce ALookAhead */
                         {
-                            List<Object> list = new152();
+                            List<?> list = new152();
                             push(goTo(15), list);
                         }
                         break;
                         case 153: /* reduce AAregexp1RegExp */
                         {
-                            List<Object> list = new153();
+                            List<?> list = new153();
                             push(goTo(16), list);
                         }
                         break;
                         case 154: /* reduce AAregexp2RegExp */
                         {
-                            List<Object> list = new154();
+                            List<?> list = new154();
                             push(goTo(16), list);
                         }
                         break;
                         case 155: /* reduce ARegExpTail */
                         {
-                            List<Object> list = new155();
+                            List<?> list = new155();
                             push(goTo(17), list);
                         }
                         break;
                         case 156: /* reduce AAconcat1Concat */
                         {
-                            List<Object> list = new156();
+                            List<?> list = new156();
                             push(goTo(18), list);
                         }
                         break;
                         case 157: /* reduce AAconcat2Concat */
                         {
-                            List<Object> list = new157();
+                            List<?> list = new157();
                             push(goTo(18), list);
                         }
                         break;
                         case 158: /* reduce AAunexp1UnExp */
                         {
-                            List<Object> list = new158();
+                            List<?> list = new158();
                             push(goTo(19), list);
                         }
                         break;
                         case 159: /* reduce AAunexp2UnExp */
                         {
-                            List<Object> list = new159();
+                            List<?> list = new159();
                             push(goTo(19), list);
                         }
                         break;
                         case 160: /* reduce ACharBasic */
                         {
-                            List<Object> list = new160();
+                            List<?> list = new160();
                             push(goTo(20), list);
                         }
                         break;
                         case 161: /* reduce ASetBasic */
                         {
-                            List<Object> list = new161();
+                            List<?> list = new161();
                             push(goTo(20), list);
                         }
                         break;
                         case 162: /* reduce AStringBasic */
                         {
-                            List<Object> list = new162();
+                            List<?> list = new162();
                             push(goTo(20), list);
                         }
                         break;
                         case 163: /* reduce AIdBasic */
                         {
-                            List<Object> list = new163();
+                            List<?> list = new163();
                             push(goTo(20), list);
                         }
                         break;
                         case 164: /* reduce ARegExpBasic */
                         {
-                            List<Object> list = new164();
+                            List<?> list = new164();
                             push(goTo(20), list);
                         }
                         break;
                         case 165: /* reduce ACharChar */
                         {
-                            List<Object> list = new165();
+                            List<?> list = new165();
                             push(goTo(21), list);
                         }
                         break;
                         case 166: /* reduce ADecChar */
                         {
-                            List<Object> list = new166();
+                            List<?> list = new166();
                             push(goTo(21), list);
                         }
                         break;
                         case 167: /* reduce AHexChar */
                         {
-                            List<Object> list = new167();
+                            List<?> list = new167();
                             push(goTo(21), list);
                         }
                         break;
                         case 168: /* reduce AOperationSet */
                         {
-                            List<Object> list = new168();
+                            List<?> list = new168();
                             push(goTo(22), list);
                         }
                         break;
                         case 169: /* reduce AIntervalSet */
                         {
-                            List<Object> list = new169();
+                            List<?> list = new169();
                             push(goTo(22), list);
                         }
                         break;
                         case 170: /* reduce AStarUnOp */
                         {
-                            List<Object> list = new170();
+                            List<?> list = new170();
                             push(goTo(23), list);
                         }
                         break;
                         case 171: /* reduce AQMarkUnOp */
                         {
-                            List<Object> list = new171();
+                            List<?> list = new171();
                             push(goTo(23), list);
                         }
                         break;
                         case 172: /* reduce APlusUnOp */
                         {
-                            List<Object> list = new172();
+                            List<?> list = new172();
                             push(goTo(23), list);
                         }
                         break;
                         case 173: /* reduce APlusBinOp */
                         {
-                            List<Object> list = new173();
+                            List<?> list = new173();
                             push(goTo(24), list);
                         }
                         break;
                         case 174: /* reduce AMinusBinOp */
                         {
-                            List<Object> list = new174();
+                            List<?> list = new174();
                             push(goTo(24), list);
                         }
                         break;
                         case 175: /* reduce AProductions */
                         {
-                            List<Object> list = new175();
+                            List<?> list = new175();
                             push(goTo(25), list);
                         }
                         break;
                         case 176: /* reduce AAprod1Prod */
                         {
-                            List<Object> list = new176();
+                            List<?> list = new176();
                             push(goTo(26), list);
                         }
                         break;
                         case 177: /* reduce AAprod2Prod */
                         {
-                            List<Object> list = new177();
+                            List<?> list = new177();
                             push(goTo(26), list);
                         }
                         break;
                         case 178: /* reduce AAprodtransform1ProdTransform */
                         {
-                            List<Object> list = new178();
+                            List<?> list = new178();
                             push(goTo(27), list);
                         }
                         break;
                         case 179: /* reduce AAprodtransform2ProdTransform */
                         {
-                            List<Object> list = new179();
+                            List<?> list = new179();
                             push(goTo(27), list);
                         }
                         break;
                         case 180: /* reduce AAalts1Alts */
                         {
-                            List<Object> list = new180();
+                            List<?> list = new180();
                             push(goTo(28), list);
                         }
                         break;
                         case 181: /* reduce AAalts2Alts */
                         {
-                            List<Object> list = new181();
+                            List<?> list = new181();
                             push(goTo(28), list);
                         }
                         break;
                         case 182: /* reduce AAltsTail */
                         {
-                            List<Object> list = new182();
+                            List<?> list = new182();
                             push(goTo(29), list);
                         }
                         break;
                         case 183: /* reduce AAalt1Alt */
                         {
-                            List<Object> list = new183();
+                            List<?> list = new183();
                             push(goTo(30), list);
                         }
                         break;
                         case 184: /* reduce AAalt2Alt */
                         {
-                            List<Object> list = new184();
+                            List<?> list = new184();
                             push(goTo(30), list);
                         }
                         break;
                         case 185: /* reduce AAalt3Alt */
                         {
-                            List<Object> list = new185();
+                            List<?> list = new185();
                             push(goTo(30), list);
                         }
                         break;
                         case 186: /* reduce AAalt4Alt */
                         {
-                            List<Object> list = new186();
+                            List<?> list = new186();
                             push(goTo(30), list);
                         }
                         break;
                         case 187: /* reduce AAalt5Alt */
                         {
-                            List<Object> list = new187();
+                            List<?> list = new187();
                             push(goTo(30), list);
                         }
                         break;
                         case 188: /* reduce AAalt6Alt */
                         {
-                            List<Object> list = new188();
+                            List<?> list = new188();
                             push(goTo(30), list);
                         }
                         break;
                         case 189: /* reduce AAalt7Alt */
                         {
-                            List<Object> list = new189();
+                            List<?> list = new189();
                             push(goTo(30), list);
                         }
                         break;
                         case 190: /* reduce AAalt8Alt */
                         {
-                            List<Object> list = new190();
+                            List<?> list = new190();
                             push(goTo(30), list);
                         }
                         break;
                         case 191: /* reduce AAalttransform1AltTransform */
                         {
-                            List<Object> list = new191();
+                            List<?> list = new191();
                             push(goTo(31), list);
                         }
                         break;
                         case 192: /* reduce AAalttransform2AltTransform */
                         {
-                            List<Object> list = new192();
+                            List<?> list = new192();
                             push(goTo(31), list);
                         }
                         break;
                         case 193: /* reduce AAnewterm1Term */
                         {
-                            List<Object> list = new193();
+                            List<?> list = new193();
                             push(goTo(32), list);
                         }
                         break;
                         case 194: /* reduce AAnewterm2Term */
                         {
-                            List<Object> list = new194();
+                            List<?> list = new194();
                             push(goTo(32), list);
                         }
                         break;
                         case 195: /* reduce AAlistterm1Term */
                         {
-                            List<Object> list = new195();
+                            List<?> list = new195();
                             push(goTo(32), list);
                         }
                         break;
                         case 196: /* reduce AAlistterm2Term */
                         {
-                            List<Object> list = new196();
+                            List<?> list = new196();
                             push(goTo(32), list);
                         }
                         break;
                         case 197: /* reduce AAsimpleterm1Term */
                         {
-                            List<Object> list = new197();
+                            List<?> list = new197();
                             push(goTo(32), list);
                         }
                         break;
                         case 198: /* reduce AAsimpleterm2Term */
                         {
-                            List<Object> list = new198();
+                            List<?> list = new198();
                             push(goTo(32), list);
                         }
                         break;
                         case 199: /* reduce AAsimpleterm3Term */
                         {
-                            List<Object> list = new199();
+                            List<?> list = new199();
                             push(goTo(32), list);
                         }
                         break;
                         case 200: /* reduce AAsimpleterm4Term */
                         {
-                            List<Object> list = new200();
+                            List<?> list = new200();
                             push(goTo(32), list);
                         }
                         break;
                         case 201: /* reduce ANullTerm */
                         {
-                            List<Object> list = new201();
+                            List<?> list = new201();
                             push(goTo(32), list);
                         }
                         break;
                         case 202: /* reduce AAlistoflistterm1ListOfListTerm */
                         {
-                            List<Object> list = new202();
+                            List<?> list = new202();
                             push(goTo(33), list);
                         }
                         break;
                         case 203: /* reduce AAlistoflistterm2ListOfListTerm */
                         {
-                            List<Object> list = new203();
+                            List<?> list = new203();
                             push(goTo(33), list);
                         }
                         break;
                         case 204: /* reduce AAnewlistterm1ListTerm */
                         {
-                            List<Object> list = new204();
+                            List<?> list = new204();
                             push(goTo(34), list);
                         }
                         break;
                         case 205: /* reduce AAnewlistterm2ListTerm */
                         {
-                            List<Object> list = new205();
+                            List<?> list = new205();
                             push(goTo(34), list);
                         }
                         break;
                         case 206: /* reduce AAsimplelistterm1ListTerm */
                         {
-                            List<Object> list = new206();
+                            List<?> list = new206();
                             push(goTo(34), list);
                         }
                         break;
                         case 207: /* reduce AAsimplelistterm2ListTerm */
                         {
-                            List<Object> list = new207();
+                            List<?> list = new207();
                             push(goTo(34), list);
                         }
                         break;
                         case 208: /* reduce AAsimplelistterm3ListTerm */
                         {
-                            List<Object> list = new208();
+                            List<?> list = new208();
                             push(goTo(34), list);
                         }
                         break;
                         case 209: /* reduce AAsimplelistterm4ListTerm */
                         {
-                            List<Object> list = new209();
+                            List<?> list = new209();
                             push(goTo(34), list);
                         }
                         break;
                         case 210: /* reduce AListTermTail */
                         {
-                            List<Object> list = new210();
+                            List<?> list = new210();
                             push(goTo(35), list);
                         }
                         break;
                         case 211: /* reduce ASimpleTermTail */
                         {
-                            List<Object> list = new211();
+                            List<?> list = new211();
                             push(goTo(36), list);
                         }
                         break;
                         case 212: /* reduce AAprodname1ProdName */
                         {
-                            List<Object> list = new212();
+                            List<?> list = new212();
                             push(goTo(37), list);
                         }
                         break;
                         case 213: /* reduce AAprodname2ProdName */
                         {
-                            List<Object> list = new213();
+                            List<?> list = new213();
                             push(goTo(37), list);
                         }
                         break;
                         case 214: /* reduce AProdNameTail */
                         {
-                            List<Object> list = new214();
+                            List<?> list = new214();
                             push(goTo(38), list);
                         }
                         break;
                         case 215: /* reduce AAparams1Params */
                         {
-                            List<Object> list = new215();
+                            List<?> list = new215();
                             push(goTo(39), list);
                         }
                         break;
                         case 216: /* reduce AAparams2Params */
                         {
-                            List<Object> list = new216();
+                            List<?> list = new216();
                             push(goTo(39), list);
                         }
                         break;
                         case 217: /* reduce AParamsTail */
                         {
-                            List<Object> list = new217();
+                            List<?> list = new217();
                             push(goTo(40), list);
                         }
                         break;
                         case 218: /* reduce AAltName */
                         {
-                            List<Object> list = new218();
+                            List<?> list = new218();
                             push(goTo(41), list);
                         }
                         break;
                         case 219: /* reduce AAelem1Elem */
                         {
-                            List<Object> list = new219();
+                            List<?> list = new219();
                             push(goTo(42), list);
                         }
                         break;
                         case 220: /* reduce AAelem2Elem */
                         {
-                            List<Object> list = new220();
+                            List<?> list = new220();
                             push(goTo(42), list);
                         }
                         break;
                         case 221: /* reduce AAelem3Elem */
                         {
-                            List<Object> list = new221();
+                            List<?> list = new221();
                             push(goTo(42), list);
                         }
                         break;
                         case 222: /* reduce AAelem4Elem */
                         {
-                            List<Object> list = new222();
+                            List<?> list = new222();
                             push(goTo(42), list);
                         }
                         break;
                         case 223: /* reduce AAelem5Elem */
                         {
-                            List<Object> list = new223();
+                            List<?> list = new223();
                             push(goTo(42), list);
                         }
                         break;
                         case 224: /* reduce AAelem6Elem */
                         {
-                            List<Object> list = new224();
+                            List<?> list = new224();
                             push(goTo(42), list);
                         }
                         break;
                         case 225: /* reduce AAelem7Elem */
                         {
-                            List<Object> list = new225();
+                            List<?> list = new225();
                             push(goTo(42), list);
                         }
                         break;
                         case 226: /* reduce AAelem8Elem */
                         {
-                            List<Object> list = new226();
+                            List<?> list = new226();
                             push(goTo(42), list);
                         }
                         break;
                         case 227: /* reduce AElemName */
                         {
-                            List<Object> list = new227();
+                            List<?> list = new227();
                             push(goTo(43), list);
                         }
                         break;
                         case 228: /* reduce ATokenSpecifier */
                         {
-                            List<Object> list = new228();
+                            List<?> list = new228();
                             push(goTo(44), list);
                         }
                         break;
                         case 229: /* reduce AProductionSpecifier */
                         {
-                            List<Object> list = new229();
+                            List<?> list = new229();
                             push(goTo(44), list);
                         }
                         break;
                         case 230: /* reduce AAst */
                         {
-                            List<Object> list = new230();
+                            List<?> list = new230();
                             push(goTo(45), list);
                         }
                         break;
                         case 231: /* reduce AAstProd */
                         {
-                            List<Object> list = new231();
+                            List<?> list = new231();
                             push(goTo(46), list);
                         }
                         break;
                         case 232: /* reduce AAastalts1AstAlts */
                         {
-                            List<Object> list = new232();
+                            List<?> list = new232();
                             push(goTo(47), list);
                         }
                         break;
                         case 233: /* reduce AAastalts2AstAlts */
                         {
-                            List<Object> list = new233();
+                            List<?> list = new233();
                             push(goTo(47), list);
                         }
                         break;
                         case 234: /* reduce AAstAltsTail */
                         {
-                            List<Object> list = new234();
+                            List<?> list = new234();
                             push(goTo(48), list);
                         }
                         break;
                         case 235: /* reduce AAastalt1AstAlt */
                         {
-                            List<Object> list = new235();
+                            List<?> list = new235();
                             push(goTo(49), list);
                         }
                         break;
                         case 236: /* reduce AAastalt2AstAlt */
                         {
-                            List<Object> list = new236();
+                            List<?> list = new236();
                             push(goTo(49), list);
                         }
                         break;
                         case 237: /* reduce AAastalt3AstAlt */
                         {
-                            List<Object> list = new237();
+                            List<?> list = new237();
                             push(goTo(49), list);
                         }
                         break;
                         case 238: /* reduce AAastalt4AstAlt */
                         {
-                            List<Object> list = new238();
+                            List<?> list = new238();
                             push(goTo(49), list);
                         }
                         break;
                         case 239: /* reduce ATerminal$PkgNameTail */
                         {
-                            List<Object> list = new239();
+                            List<?> list = new239();
                             push(goTo(50), list);
                         }
                         break;
                         case 240: /* reduce ANonTerminal$PkgNameTail */
                         {
-                            List<Object> list = new240();
+                            List<?> list = new240();
                             push(goTo(50), list);
                         }
                         break;
                         case 241: /* reduce ATerminal$HelperDef */
                         {
-                            List<Object> list = new241();
+                            List<?> list = new241();
                             push(goTo(51), list);
                         }
                         break;
                         case 242: /* reduce ANonTerminal$HelperDef */
                         {
-                            List<Object> list = new242();
+                            List<?> list = new242();
                             push(goTo(51), list);
                         }
                         break;
                         case 243: /* reduce ATerminal$IdListTail */
                         {
-                            List<Object> list = new243();
+                            List<?> list = new243();
                             push(goTo(52), list);
                         }
                         break;
                         case 244: /* reduce ANonTerminal$IdListTail */
                         {
-                            List<Object> list = new244();
+                            List<?> list = new244();
                             push(goTo(52), list);
                         }
                         break;
                         case 245: /* reduce ATerminal$TokenDef */
                         {
-                            List<Object> list = new245();
+                            List<?> list = new245();
                             push(goTo(53), list);
                         }
                         break;
                         case 246: /* reduce ANonTerminal$TokenDef */
                         {
-                            List<Object> list = new246();
+                            List<?> list = new246();
                             push(goTo(53), list);
                         }
                         break;
                         case 247: /* reduce ATerminal$StateListTail */
                         {
-                            List<Object> list = new247();
+                            List<?> list = new247();
                             push(goTo(54), list);
                         }
                         break;
                         case 248: /* reduce ANonTerminal$StateListTail */
                         {
-                            List<Object> list = new248();
+                            List<?> list = new248();
                             push(goTo(54), list);
                         }
                         break;
                         case 249: /* reduce ATerminal$RegExpTail */
                         {
-                            List<Object> list = new249();
+                            List<?> list = new249();
                             push(goTo(55), list);
                         }
                         break;
                         case 250: /* reduce ANonTerminal$RegExpTail */
                         {
-                            List<Object> list = new250();
+                            List<?> list = new250();
                             push(goTo(55), list);
                         }
                         break;
                         case 251: /* reduce ATerminal$UnExp */
                         {
-                            List<Object> list = new251();
+                            List<?> list = new251();
                             push(goTo(56), list);
                         }
                         break;
                         case 252: /* reduce ANonTerminal$UnExp */
                         {
-                            List<Object> list = new252();
+                            List<?> list = new252();
                             push(goTo(56), list);
                         }
                         break;
                         case 253: /* reduce ATerminal$Prod */
                         {
-                            List<Object> list = new253();
+                            List<?> list = new253();
                             push(goTo(57), list);
                         }
                         break;
                         case 254: /* reduce ANonTerminal$Prod */
                         {
-                            List<Object> list = new254();
+                            List<?> list = new254();
                             push(goTo(57), list);
                         }
                         break;
                         case 255: /* reduce ATerminal$Elem */
                         {
-                            List<Object> list = new255();
+                            List<?> list = new255();
                             push(goTo(58), list);
                         }
                         break;
                         case 256: /* reduce ANonTerminal$Elem */
                         {
-                            List<Object> list = new256();
+                            List<?> list = new256();
                             push(goTo(58), list);
                         }
                         break;
                         case 257: /* reduce ATerminal$AltsTail */
                         {
-                            List<Object> list = new257();
+                            List<?> list = new257();
                             push(goTo(59), list);
                         }
                         break;
                         case 258: /* reduce ANonTerminal$AltsTail */
                         {
-                            List<Object> list = new258();
+                            List<?> list = new258();
                             push(goTo(59), list);
                         }
                         break;
                         case 259: /* reduce ATerminal$Term */
                         {
-                            List<Object> list = new259();
+                            List<?> list = new259();
                             push(goTo(60), list);
                         }
                         break;
                         case 260: /* reduce ANonTerminal$Term */
                         {
-                            List<Object> list = new260();
+                            List<?> list = new260();
                             push(goTo(60), list);
                         }
                         break;
                         case 261: /* reduce ATerminal$ListTermTail */
                         {
-                            List<Object> list = new261();
+                            List<?> list = new261();
                             push(goTo(61), list);
                         }
                         break;
                         case 262: /* reduce ANonTerminal$ListTermTail */
                         {
-                            List<Object> list = new262();
+                            List<?> list = new262();
                             push(goTo(61), list);
                         }
                         break;
                         case 263: /* reduce ATerminal$ParamsTail */
                         {
-                            List<Object> list = new263();
+                            List<?> list = new263();
                             push(goTo(62), list);
                         }
                         break;
                         case 264: /* reduce ANonTerminal$ParamsTail */
                         {
-                            List<Object> list = new264();
+                            List<?> list = new264();
                             push(goTo(62), list);
                         }
                         break;
                         case 265: /* reduce ATerminal$AstProd */
                         {
-                            List<Object> list = new265();
+                            List<?> list = new265();
                             push(goTo(63), list);
                         }
                         break;
                         case 266: /* reduce ANonTerminal$AstProd */
                         {
-                            List<Object> list = new266();
+                            List<?> list = new266();
                             push(goTo(63), list);
                         }
                         break;
                         case 267: /* reduce ATerminal$AstAltsTail */
                         {
-                            List<Object> list = new267();
+                            List<?> list = new267();
                             push(goTo(64), list);
                         }
                         break;
                         case 268: /* reduce ANonTerminal$AstAltsTail */
                         {
-                            List<Object> list = new268();
+                            List<?> list = new268();
                             push(goTo(64), list);
                         }
                         break;
@@ -1901,8245 +1844,3917 @@ public class Parser implements IParser
                     return node;
                 }
                 case ERROR:
-                    throw new ParserException(this.last_token,
-                        "[" + this.last_line + "," + this.last_pos + "] " ,
-                        Parser.errorMessages[Parser.errors[this.action[1]]]);
+                    throw new ParserException(lastToken,
+                        "[" + lastToken.getLine() + "," + lastToken.getPos() + "] " ,
+                        Parser.errorMessages[Parser.errors[destination]]);
             }
         }
     }
 
 
+    private List<?> new0() /* reduce AAgrammar1Grammar */
+    {
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, null, null);
 
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new0() /* reduce AAgrammar1Grammar */
+    private List<?> new1() /* reduce AAgrammar2Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        }
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new2() /* reduce AAgrammar3Grammar */
+    {
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new1() /* reduce AAgrammar2Grammar */
+    private List<?> new3() /* reduce AAgrammar4Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new4() /* reduce AAgrammar5Grammar */
+    {
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new2() /* reduce AAgrammar3Grammar */
+    private List<?> new5() /* reduce AAgrammar6Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new6() /* reduce AAgrammar7Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new3() /* reduce AAgrammar4Grammar */
+    private List<?> new7() /* reduce AAgrammar8Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new8() /* reduce AAgrammar9Grammar */
+    {
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new4() /* reduce AAgrammar5Grammar */
+    private List<?> new9() /* reduce AAgrammar10Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        {
-            // Block
-        }
-        pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new10() /* reduce AAgrammar11Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new5() /* reduce AAgrammar6Grammar */
+    private List<?> new11() /* reduce AAgrammar12Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new12() /* reduce AAgrammar13Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new6() /* reduce AAgrammar7Grammar */
+    private List<?> new13() /* reduce AAgrammar14Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-        pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new14() /* reduce AAgrammar15Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new7() /* reduce AAgrammar8Grammar */
+    private List<?> new15() /* reduce AAgrammar16Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-        pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new16() /* reduce AAgrammar17Grammar */
+    {
+        List<?> nodeArrayList1 = pop();
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new8() /* reduce AAgrammar9Grammar */
+    private List<?> new17() /* reduce AAgrammar18Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PTokens ptokensNode5;
-        {
-            // Block
-        }
-        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new18() /* reduce AAgrammar19Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new9() /* reduce AAgrammar10Grammar */
+    private List<?> new19() /* reduce AAgrammar20Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new20() /* reduce AAgrammar21Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new10() /* reduce AAgrammar11Grammar */
+    private List<?> new21() /* reduce AAgrammar22Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PTokens ptokensNode5;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new22() /* reduce AAgrammar23Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new11() /* reduce AAgrammar12Grammar */
+    private List<?> new23() /* reduce AAgrammar24Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new24() /* reduce AAgrammar25Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new12() /* reduce AAgrammar13Grammar */
+    private List<?> new25() /* reduce AAgrammar26Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, null);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        {
-            // Block
-        }
-        pstatesNode4 = (PStates)nodeArrayList1.get(0);
-        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new26() /* reduce AAgrammar27Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new13() /* reduce AAgrammar14Grammar */
+    private List<?> new27() /* reduce AAgrammar28Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        pstatesNode5 = (PStates)nodeArrayList2.get(0);
-        ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new28() /* reduce AAgrammar29Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new14() /* reduce AAgrammar15Grammar */
+    private List<?> new29() /* reduce AAgrammar30Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-        pstatesNode4 = (PStates)nodeArrayList2.get(0);
-        ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new30() /* reduce AAgrammar31Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new15() /* reduce AAgrammar16Grammar */
+    private List<?> new31() /* reduce AAgrammar32Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, null);
 
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new32() /* reduce AAgrammar33Grammar */
+    {
+        List<?> nodeArrayList1 = pop();
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new16() /* reduce AAgrammar17Grammar */
+    private List<?> new33() /* reduce AAgrammar34Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PIgnTokens pigntokensNode6;
-        {
-            // Block
-        }
-        pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new34() /* reduce AAgrammar35Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new17() /* reduce AAgrammar18Grammar */
+    private List<?> new35() /* reduce AAgrammar36Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new36() /* reduce AAgrammar37Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new18() /* reduce AAgrammar19Grammar */
+    private List<?> new37() /* reduce AAgrammar38Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PIgnTokens pigntokensNode6;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new38() /* reduce AAgrammar39Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new19() /* reduce AAgrammar20Grammar */
+    private List<?> new39() /* reduce AAgrammar40Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new40() /* reduce AAgrammar41Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new20() /* reduce AAgrammar21Grammar */
+    private List<?> new41() /* reduce AAgrammar42Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PIgnTokens pigntokensNode6;
-        {
-            // Block
-        }
-        pstatesNode4 = (PStates)nodeArrayList1.get(0);
-        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new42() /* reduce AAgrammar43Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new21() /* reduce AAgrammar22Grammar */
+    private List<?> new43() /* reduce AAgrammar44Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        pstatesNode5 = (PStates)nodeArrayList2.get(0);
-        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new44() /* reduce AAgrammar45Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new22() /* reduce AAgrammar23Grammar */
+    private List<?> new45() /* reduce AAgrammar46Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PIgnTokens pigntokensNode6;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-        pstatesNode4 = (PStates)nodeArrayList2.get(0);
-        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new46() /* reduce AAgrammar47Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new23() /* reduce AAgrammar24Grammar */
+    private List<?> new47() /* reduce AAgrammar48Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
-        pstatesNode5 = (PStates)nodeArrayList3.get(0);
-        pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new48() /* reduce AAgrammar49Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new24() /* reduce AAgrammar25Grammar */
+    private List<?> new49() /* reduce AAgrammar50Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        {
-            // Block
-        }
-        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-        pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new50() /* reduce AAgrammar51Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, null);
 
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new25() /* reduce AAgrammar26Grammar */
+    private List<?> new51() /* reduce AAgrammar52Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, null);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        ptokensNode6 = (PTokens)nodeArrayList2.get(0);
-        pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-        pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+    private List<?> new52() /* reduce AAgrammar53Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new53() /* reduce AAgrammar54Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
+    private List<?> new54() /* reduce AAgrammar55Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new26() /* reduce AAgrammar27Grammar */
+    private List<?> new55() /* reduce AAgrammar56Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new56() /* reduce AAgrammar57Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new57() /* reduce AAgrammar58Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new58() /* reduce AAgrammar59Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new59() /* reduce AAgrammar60Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new60() /* reduce AAgrammar61Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-        ptokensNode5 = (PTokens)nodeArrayList2.get(0);
-        pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new61() /* reduce AAgrammar62Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new62() /* reduce AAgrammar63Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
 
-
-    private List<Object> new27() /* reduce AAgrammar28Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new28() /* reduce AAgrammar29Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new29() /* reduce AAgrammar30Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new30() /* reduce AAgrammar31Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new31() /* reduce AAgrammar32Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new32() /* reduce AAgrammar33Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PProductions pproductionsNode7;
-        {
-            // Block
-        }
-        pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new33() /* reduce AAgrammar34Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new34() /* reduce AAgrammar35Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PProductions pproductionsNode7;
-        {
-            // Block
-        }
-        phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
-        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new35() /* reduce AAgrammar36Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new36() /* reduce AAgrammar37Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PProductions pproductionsNode7;
-        {
-            // Block
-        }
-        pstatesNode4 = (PStates)nodeArrayList1.get(0);
-        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new37() /* reduce AAgrammar38Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new38() /* reduce AAgrammar39Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new39() /* reduce AAgrammar40Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new40() /* reduce AAgrammar41Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PTokens ptokensNode5;
-        PProductions pproductionsNode7;
-        {
-            // Block
-        }
-        ptokensNode5 = (PTokens)nodeArrayList1.get(0);
-        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new41() /* reduce AAgrammar42Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new42() /* reduce AAgrammar43Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PTokens ptokensNode5;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new43() /* reduce AAgrammar44Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new44() /* reduce AAgrammar45Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new45() /* reduce AAgrammar46Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new46() /* reduce AAgrammar47Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new47() /* reduce AAgrammar48Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new48() /* reduce AAgrammar49Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // Block
-        }
-        pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
-        pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, null);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new49() /* reduce AAgrammar50Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new50() /* reduce AAgrammar51Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new51() /* reduce AAgrammar52Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new52() /* reduce AAgrammar53Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new53() /* reduce AAgrammar54Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new54() /* reduce AAgrammar55Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new55() /* reduce AAgrammar56Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new56() /* reduce AAgrammar57Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new57() /* reduce AAgrammar58Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new58() /* reduce AAgrammar59Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new59() /* reduce AAgrammar60Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new60() /* reduce AAgrammar61Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new61() /* reduce AAgrammar62Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new62() /* reduce AAgrammar63Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        PProductions pproductionsNode7;
-        {
-            // 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new63() /* reduce AAgrammar64Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new64() /* reduce AAgrammar65Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PAst pastNode8;
-        {
-            // Block
-        }
-        pastNode8 = (PAst)nodeArrayList1.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, pastNode8);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new65() /* reduce AAgrammar66Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        pastNode9 = (PAst)nodeArrayList2.get(0);
-
-        pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, pastNode9);
-        }
-        nodeList.add(pgrammarNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new66() /* reduce AAgrammar67Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new67() /* reduce AAgrammar68Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new68() /* reduce AAgrammar69Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new69() /* reduce AAgrammar70Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new70() /* reduce AAgrammar71Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new71() /* reduce AAgrammar72Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new72() /* reduce AAgrammar73Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new73() /* reduce AAgrammar74Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new74() /* reduce AAgrammar75Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new75() /* reduce AAgrammar76Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new76() /* reduce AAgrammar77Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new77() /* reduce AAgrammar78Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new78() /* reduce AAgrammar79Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new79() /* reduce AAgrammar80Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new80() /* reduce AAgrammar81Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new81() /* reduce AAgrammar82Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new82() /* reduce AAgrammar83Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new83() /* reduce AAgrammar84Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new84() /* reduce AAgrammar85Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new85() /* reduce AAgrammar86Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new86() /* reduce AAgrammar87Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new87() /* reduce AAgrammar88Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new88() /* reduce AAgrammar89Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new89() /* reduce AAgrammar90Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new90() /* reduce AAgrammar91Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new91() /* reduce AAgrammar92Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new92() /* reduce AAgrammar93Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new93() /* reduce AAgrammar94Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new94() /* reduce AAgrammar95Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        PIgnTokens pigntokensNode6;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new95() /* reduce AAgrammar96Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new96() /* reduce AAgrammar97Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new97() /* reduce AAgrammar98Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new98() /* reduce AAgrammar99Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new99() /* reduce AAgrammar100Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new100() /* reduce AAgrammar101Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new101() /* reduce AAgrammar102Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new102() /* reduce AAgrammar103Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new103() /* reduce AAgrammar104Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new104() /* reduce AAgrammar105Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new105() /* reduce AAgrammar106Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new106() /* reduce AAgrammar107Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new107() /* reduce AAgrammar108Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new108() /* reduce AAgrammar109Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new109() /* reduce AAgrammar110Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new110() /* reduce AAgrammar111Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        PTokens ptokensNode5;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new111() /* reduce AAgrammar112Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new112() /* reduce AAgrammar113Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new113() /* reduce AAgrammar114Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new114() /* reduce AAgrammar115Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new115() /* reduce AAgrammar116Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new116() /* reduce AAgrammar117Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PStates pstatesNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new117() /* reduce AAgrammar118Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new118() /* reduce AAgrammar119Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        PStates pstatesNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new119() /* reduce AAgrammar120Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PStates pstatesNode5;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new120() /* reduce AAgrammar121Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new121() /* reduce AAgrammar122Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new122() /* reduce AAgrammar123Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        PHelpers phelpersNode3;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new123() /* reduce AAgrammar124Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PHelpers phelpersNode4;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new124() /* reduce AAgrammar125Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new125() /* reduce AAgrammar126Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PGrammar pgrammarNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PStates pstatesNode5;
-        PTokens ptokensNode6;
-        PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new126() /* reduce AAgrammar127Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new127() /* reduce AAgrammar128Grammar */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList7 = pop();
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList7);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new128() /* reduce APackage */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode1 = new LinkedList();
-        listNode1 = (LinkedList)nodeArrayList2.get(0);
-        if(listNode1 != null)
-        {
-            if(!listNode2.isEmpty()){
-                listNode2.addAll(listNode1);
-            }else{
-                listNode2 = listNode1;
-            }
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new129() /* reduce AApkgname1PkgName */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        TPkgId tpkgidNode1;
-        tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-        if(tpkgidNode1 != null)
-        {
-            listNode2.add(tpkgidNode1);
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new130() /* reduce AApkgname2PkgName */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new131() /* reduce APkgNameTail */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TPkgId tpkgidNode1;
-        tpkgidNode1 = (TPkgId)nodeArrayList2.get(0);
-        nodeList.add(tpkgidNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new132() /* reduce AHelpers */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PHelpers phelpersNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-
-        phelpersNode1 = new AHelpers(listNode3);
-        }
-        nodeList.add(phelpersNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new133() /* reduce AHelperDef */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new134() /* reduce AStates */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PStates pstatesNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-
-        pstatesNode1 = new AStates(listNode3);
-        }
-        nodeList.add(pstatesNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new135() /* reduce AAidlist1IdList */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        TId tidNode1;
-        tidNode1 = (TId)nodeArrayList1.get(0);
-        if(tidNode1 != null)
-        {
-            listNode2.add(tidNode1);
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new136() /* reduce AAidlist2IdList */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new137() /* reduce AIdListTail */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TId tidNode1;
-        tidNode1 = (TId)nodeArrayList2.get(0);
-        nodeList.add(tidNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new138() /* reduce ATokens */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTokens ptokensNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-
-        ptokensNode1 = new ATokens(listNode3);
-        }
-        nodeList.add(ptokensNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new139() /* reduce AAtokendef1TokenDef */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTokenDef ptokendefNode1;
-        {
-            // Block
-        TId tidNode3;
-        PRegExp pregexpNode4;
-        tidNode3 = (TId)nodeArrayList1.get(0);
-        pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
-
-        ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, null, null);
-        }
-        nodeList.add(ptokendefNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new140() /* reduce AAtokendef2TokenDef */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTokenDef ptokendefNode1;
-        {
-            // Block
-        PStateList pstatelistNode2;
-        TId tidNode3;
-        PRegExp pregexpNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new141() /* reduce AAtokendef3TokenDef */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTokenDef ptokendefNode1;
-        {
-            // Block
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new142() /* reduce AAtokendef4TokenDef */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList6 = pop();
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new143() /* reduce AAstatelist1StateList */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PStateList pstatelistNode1;
-        {
-            // Block
-        TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
-        tidNode2 = (TId)nodeArrayList2.get(0);
-        {
-            // Block
-        }
-
-        pstatelistNode1 = new AStateList(tidNode2, null, listNode4);
-        }
-        nodeList.add(pstatelistNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new144() /* reduce AAstatelist2StateList */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new145() /* reduce AAstatelist3StateList */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PStateList pstatelistNode1;
-        {
-            // Block
-        TId tidNode2;
-        LinkedList listNode5 = new LinkedList();
-        tidNode2 = (TId)nodeArrayList2.get(0);
-        {
-            // Block
-        LinkedList listNode4 = new LinkedList();
-        listNode4 = (LinkedList)nodeArrayList3.get(0);
-        if(listNode4 != null)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
-        }
-
-        pstatelistNode1 = new AStateList(tidNode2, null, listNode5);
-        }
-        nodeList.add(pstatelistNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new146() /* reduce AAstatelist4StateList */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
-        }
-
-        pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode5);
-        }
-        nodeList.add(pstatelistNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new147() /* reduce AAstatelisttail1StateListTail */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PStateListTail pstatelisttailNode1;
-        {
-            // Block
-        TId tidNode2;
-        tidNode2 = (TId)nodeArrayList2.get(0);
-
-        pstatelisttailNode1 = new AStateListTail(tidNode2, null);
-        }
-        nodeList.add(pstatelisttailNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new148() /* reduce AAstatelisttail2StateListTail */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new149() /* reduce ATransition */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTransition ptransitionNode1;
-        {
-            // Block
-        TId tidNode2;
-        tidNode2 = (TId)nodeArrayList2.get(0);
-
-        ptransitionNode1 = new ATransition(tidNode2);
-        }
-        nodeList.add(ptransitionNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new150() /* reduce AAigntokens1IgnTokens */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PIgnTokens pigntokensNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        }
-
-        pigntokensNode1 = new AIgnTokens(listNode2);
-        }
-        nodeList.add(pigntokensNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new151() /* reduce AAigntokens2IgnTokens */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PIgnTokens pigntokensNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList3.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-
-        pigntokensNode1 = new AIgnTokens(listNode3);
-        }
-        nodeList.add(pigntokensNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new152() /* reduce ALookAhead */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TSlash tslashNode1;
-        PRegExp pregexpNode2;
-        tslashNode1 = (TSlash)nodeArrayList1.get(0);
-        pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
-        nodeList.add(tslashNode1);
-        nodeList.add(pregexpNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new153() /* reduce AAregexp1RegExp */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new154() /* reduce AAregexp2RegExp */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
-        }
-
-        pregexpNode1 = new ARegExp(listNode4);
-        }
-        nodeList.add(pregexpNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new155() /* reduce ARegExpTail */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PConcat pconcatNode1;
-        pconcatNode1 = (PConcat)nodeArrayList2.get(0);
-        nodeList.add(pconcatNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new156() /* reduce AAconcat1Concat */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        PConcat pconcatNode1;
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        }
-
-        pconcatNode1 = new AConcat(listNode2);
-        }
-        nodeList.add(pconcatNode1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new157() /* reduce AAconcat2Concat */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PConcat pconcatNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-
-        pconcatNode1 = new AConcat(listNode3);
-        }
-        nodeList.add(pconcatNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new158() /* reduce AAunexp1UnExp */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PUnExp punexpNode1;
-        {
-            // Block
-        PBasic pbasicNode2;
-        pbasicNode2 = (PBasic)nodeArrayList1.get(0);
-
-        punexpNode1 = new AUnExp(pbasicNode2, null);
-        }
-        nodeList.add(punexpNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new159() /* reduce AAunexp2UnExp */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new160() /* reduce ACharBasic */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PBasic pbasicNode1;
-        {
-            // Block
-        PChar pcharNode2;
-        pcharNode2 = (PChar)nodeArrayList1.get(0);
-
-        pbasicNode1 = new ACharBasic(pcharNode2);
-        }
-        nodeList.add(pbasicNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new161() /* reduce ASetBasic */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PBasic pbasicNode1;
-        {
-            // Block
-        PSet psetNode2;
-        psetNode2 = (PSet)nodeArrayList1.get(0);
-
-        pbasicNode1 = new ASetBasic(psetNode2);
-        }
-        nodeList.add(pbasicNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new162() /* reduce AStringBasic */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PBasic pbasicNode1;
-        {
-            // Block
-        TString tstringNode2;
-        tstringNode2 = (TString)nodeArrayList1.get(0);
-
-        pbasicNode1 = new AStringBasic(tstringNode2);
-        }
-        nodeList.add(pbasicNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new163() /* reduce AIdBasic */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PBasic pbasicNode1;
-        {
-            // Block
-        TId tidNode2;
-        tidNode2 = (TId)nodeArrayList1.get(0);
-
-        pbasicNode1 = new AIdBasic(tidNode2);
-        }
-        nodeList.add(pbasicNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new164() /* reduce ARegExpBasic */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PBasic pbasicNode1;
-        {
-            // Block
-        PRegExp pregexpNode2;
-        pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
-
-        pbasicNode1 = new ARegExpBasic(pregexpNode2);
-        }
-        nodeList.add(pbasicNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new165() /* reduce ACharChar */
+    private List<?> new63() /* reduce AAgrammar64Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PChar pcharNode1;
-        {
-            // Block
-        TChar tcharNode2;
-        tcharNode2 = (TChar)nodeArrayList1.get(0);
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, null);
 
-        pcharNode1 = new ACharChar(tcharNode2);
-        }
-        nodeList.add(pcharNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new166() /* reduce ADecChar */
+    private List<?> new64() /* reduce AAgrammar65Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        PAst pastNode8 = (PAst)nodeArrayList1.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, null, pastNode8);
 
-        List<Object> nodeArrayList1 = pop();
-        PChar pcharNode1;
-        {
-            // Block
-        TDecChar tdeccharNode2;
-        tdeccharNode2 = (TDecChar)nodeArrayList1.get(0);
-
-        pcharNode1 = new ADecChar(tdeccharNode2);
-        }
-        nodeList.add(pcharNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new167() /* reduce AHexChar */
+    private List<?> new65() /* reduce AAgrammar66Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PChar pcharNode1;
-        {
-            // Block
-        THexChar thexcharNode2;
-        thexcharNode2 = (THexChar)nodeArrayList1.get(0);
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PAst pastNode9 = (PAst)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, pastNode9);
 
-        pcharNode1 = new AHexChar(thexcharNode2);
-        }
-        nodeList.add(pcharNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new168() /* reduce AOperationSet */
+    private List<?> new66() /* reduce AAgrammar67Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, null, pastNode8);
 
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new169() /* reduce AIntervalSet */
+    private List<?> new67() /* reduce AAgrammar68Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PSet psetNode1;
-        {
-            // Block
-        PChar pcharNode2;
-        PChar pcharNode3;
-        pcharNode2 = (PChar)nodeArrayList2.get(0);
-        pcharNode3 = (PChar)nodeArrayList4.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, null, pastNode9);
 
-        psetNode1 = new AIntervalSet(pcharNode2, pcharNode3);
-        }
-        nodeList.add(psetNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new170() /* reduce AStarUnOp */
+    private List<?> new68() /* reduce AAgrammar69Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PUnOp punopNode1;
-        {
-            // Block
-        TStar tstarNode2;
-        tstarNode2 = (TStar)nodeArrayList1.get(0);
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, null, pastNode8);
 
-        punopNode1 = new AStarUnOp(tstarNode2);
-        }
-        nodeList.add(punopNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new171() /* reduce AQMarkUnOp */
+    private List<?> new69() /* reduce AAgrammar70Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, null, pastNode9);
 
-        List<Object> nodeArrayList1 = pop();
-        PUnOp punopNode1;
-        {
-            // Block
-        TQMark tqmarkNode2;
-        tqmarkNode2 = (TQMark)nodeArrayList1.get(0);
-
-        punopNode1 = new AQMarkUnOp(tqmarkNode2);
-        }
-        nodeList.add(punopNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new172() /* reduce APlusUnOp */
+    private List<?> new70() /* reduce AAgrammar71Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PUnOp punopNode1;
-        {
-            // Block
-        TPlus tplusNode2;
-        tplusNode2 = (TPlus)nodeArrayList1.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, null, pastNode8);
 
-        punopNode1 = new APlusUnOp(tplusNode2);
-        }
-        nodeList.add(punopNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new173() /* reduce APlusBinOp */
+    private List<?> new71() /* reduce AAgrammar72Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PBinOp pbinopNode1;
-        {
-            // Block
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, null, pastNode9);
 
-        pbinopNode1 = new APlusBinOp();
-        }
-        nodeList.add(pbinopNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new174() /* reduce AMinusBinOp */
+    private List<?> new72() /* reduce AAgrammar73Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PBinOp pbinopNode1;
-        {
-            // Block
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, null, pastNode8);
 
-        pbinopNode1 = new AMinusBinOp();
-        }
-        nodeList.add(pbinopNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new175() /* reduce AProductions */
+    private List<?> new73() /* reduce AAgrammar74Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PProductions pproductionsNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, null, pastNode9);
 
-        pproductionsNode1 = new AProductions(listNode3);
-        }
-        nodeList.add(pproductionsNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new176() /* reduce AAprod1Prod */
+    private List<?> new74() /* reduce AAgrammar75Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PProd pprodNode1;
-        {
-            // Block
-        TId tidNode2;
-        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)
-        {
-            if(!listNode6.isEmpty()){
-                listNode6.addAll(listNode5);
-            }else{
-                listNode6 = listNode5;
-            }
-        }
-        }
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, null, pastNode8);
 
-        pprodNode1 = new AProd(tidNode2, null, listNode4, listNode6);
-        }
-        nodeList.add(pprodNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new177() /* reduce AAprod2Prod */
+    private List<?> new75() /* reduce AAgrammar76Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
-        }
-        {
-            // Block
-        LinkedList listNode6 = new LinkedList();
-        listNode6 = (LinkedList)nodeArrayList4.get(0);
-        if(listNode6 != null)
-        {
-            if(!listNode7.isEmpty()){
-                listNode7.addAll(listNode6);
-            }else{
-                listNode7 = listNode6;
-            }
-        }
-        }
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, null, pastNode9);
 
-        pprodNode1 = new AProd(tidNode2, tarrowNode3, listNode5, listNode7);
-        }
-        nodeList.add(pprodNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new178() /* reduce AAprodtransform1ProdTransform */
+    private List<?> new76() /* reduce AAgrammar77Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, null, pastNode8);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TArrow tarrowNode1;
-        LinkedList listNode2 = new LinkedList();
-        tarrowNode1 = (TArrow)nodeArrayList2.get(0);
-        {
-            // Block
-        }
-        nodeList.add(tarrowNode1);
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new179() /* reduce AAprodtransform2ProdTransform */
+    private List<?> new77() /* reduce AAgrammar78Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, null, pastNode9);
 
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        nodeList.add(tarrowNode1);
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new180() /* reduce AAalts1Alts */
+    private List<?> new78() /* reduce AAgrammar79Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, null, pastNode8);
 
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PAlt paltNode1;
-        paltNode1 = (PAlt)nodeArrayList1.get(0);
-        if(paltNode1 != null)
-        {
-            listNode2.add(paltNode1);
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new181() /* reduce AAalts2Alts */
+    private List<?> new79() /* reduce AAgrammar80Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, null, pastNode9);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new182() /* reduce AAltsTail */
+    private List<?> new80() /* reduce AAgrammar81Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, null, pastNode8);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PAlt paltNode1;
-        paltNode1 = (PAlt)nodeArrayList2.get(0);
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new183() /* reduce AAalt1Alt */
+    private List<?> new81() /* reduce AAgrammar82Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, null, pastNode9);
 
-        PAlt paltNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        }
-
-        paltNode1 = new AAlt(null, listNode3, null);
-        }
-        nodeList.add(paltNode1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new184() /* reduce AAalt2Alt */
+    private List<?> new82() /* reduce AAgrammar83Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PAlt paltNode1;
-        {
-            // Block
-        TId tidNode2;
-        LinkedList listNode3 = new LinkedList();
-        tidNode2 = (TId)nodeArrayList1.get(0);
-        {
-            // Block
-        }
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, null, pastNode8);
 
-        paltNode1 = new AAlt(tidNode2, listNode3, null);
-        }
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new185() /* reduce AAalt3Alt */
+    private List<?> new83() /* reduce AAgrammar84Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PAlt paltNode1;
-        {
-            // Block
-        LinkedList listNode4 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
-        }
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, null, pastNode9);
 
-        paltNode1 = new AAlt(null, listNode4, null);
-        }
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new186() /* reduce AAalt4Alt */
+    private List<?> new84() /* reduce AAgrammar85Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PAlt paltNode1;
-        {
-            // Block
-        TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
-        tidNode2 = (TId)nodeArrayList1.get(0);
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
-        }
-
-        paltNode1 = new AAlt(tidNode2, listNode4, null);
-        }
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new187() /* reduce AAalt5Alt */
+    private List<?> new85() /* reduce AAgrammar86Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PAlt paltNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        PAltTransform palttransformNode4;
-        {
-            // Block
-        }
-        palttransformNode4 = (PAltTransform)nodeArrayList1.get(0);
-
-        paltNode1 = new AAlt(null, listNode3, palttransformNode4);
-        }
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
-    }
-
-
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, null, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new188() /* reduce AAalt6Alt */
+    private List<?> new86() /* reduce AAgrammar87Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PAlt paltNode1;
-        {
-            // Block
-        TId tidNode2;
-        LinkedList listNode3 = new LinkedList();
-        PAltTransform palttransformNode4;
-        tidNode2 = (TId)nodeArrayList1.get(0);
-        {
-            // Block
-        }
-        palttransformNode4 = (PAltTransform)nodeArrayList2.get(0);
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-        paltNode1 = new AAlt(tidNode2, listNode3, palttransformNode4);
-        }
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new189() /* reduce AAalt7Alt */
+    private List<?> new87() /* reduce AAgrammar88Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PAlt paltNode1;
-        {
-            // Block
-        LinkedList listNode4 = new LinkedList();
-        PAltTransform palttransformNode5;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
-        }
-        palttransformNode5 = (PAltTransform)nodeArrayList2.get(0);
-
-        paltNode1 = new AAlt(null, listNode4, palttransformNode5);
-        }
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
-    }
-
-
-
-    private List<Object> new190() /* reduce AAalt8Alt */
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, null, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new88() /* reduce AAgrammar89Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
-        }
-        palttransformNode5 = (PAltTransform)nodeArrayList3.get(0);
-
-        paltNode1 = new AAlt(tidNode2, listNode4, palttransformNode5);
-        }
-        nodeList.add(paltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new89() /* reduce AAgrammar90Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, null, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new90() /* reduce AAgrammar91Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new91() /* reduce AAgrammar92Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, null, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new92() /* reduce AAgrammar93Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new93() /* reduce AAgrammar94Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
     }
-
-
-
-    private List<Object> new191() /* reduce AAalttransform1AltTransform */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+
+    private List<?> new94() /* reduce AAgrammar95Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new95() /* reduce AAgrammar96Grammar */
+    {
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList6.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, null, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new96() /* reduce AAgrammar97Grammar */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList2.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new97() /* reduce AAgrammar98Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
-
-
-    private List<Object> new192() /* reduce AAalttransform2AltTransform */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
-        }
-        trbraceNode5 = (TRBrace)nodeArrayList4.get(0);
-
-        palttransformNode1 = new AAltTransform(tlbraceNode2, listNode4, trbraceNode5);
-        }
-        nodeList.add(palttransformNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+    private List<?> new98() /* reduce AAgrammar99Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new99() /* reduce AAgrammar100Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, null, pproductionsNode8, pastNode9);
 
-
-    private List<Object> new193() /* reduce AAnewterm1Term */
-    {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
     }
 
+    private List<?> new100() /* reduce AAgrammar101Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
+    private List<?> new101() /* reduce AAgrammar102Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, null, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-    private List<Object> new194() /* reduce AAnewterm2Term */
+    private List<?> new102() /* reduce AAgrammar103Grammar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
 
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
+    private List<?> new103() /* reduce AAgrammar104Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, null, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new104() /* reduce AAgrammar105Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new105() /* reduce AAgrammar106Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, null, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new106() /* reduce AAgrammar107Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new107() /* reduce AAgrammar108Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, null, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new108() /* reduce AAgrammar109Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new109() /* reduce AAgrammar110Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new110() /* reduce AAgrammar111Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new111() /* reduce AAgrammar112Grammar */
+    {
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList6.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, null, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new112() /* reduce AAgrammar113Grammar */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList3.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new113() /* reduce AAgrammar114Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new114() /* reduce AAgrammar115Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new115() /* reduce AAgrammar116Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, null, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new116() /* reduce AAgrammar117Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new117() /* reduce AAgrammar118Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new118() /* reduce AAgrammar119Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new119() /* reduce AAgrammar120Grammar */
+    {
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList6.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, null, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new120() /* reduce AAgrammar121Grammar */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTokens ptokensNode5 = (PTokens)nodeArrayList1.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList4.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new121() /* reduce AAgrammar122Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PTokens ptokensNode6 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new122() /* reduce AAgrammar123Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new123() /* reduce AAgrammar124Grammar */
+    {
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList6.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, null, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new124() /* reduce AAgrammar125Grammar */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStates pstatesNode4 = (PStates)nodeArrayList1.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList2.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList5.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new125() /* reduce AAgrammar126Grammar */
+    {
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PStates pstatesNode5 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList5.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList6.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, null, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new126() /* reduce AAgrammar127Grammar */
+    {
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PHelpers phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
+        PStates pstatesNode4 = (PStates)nodeArrayList2.get(0);
+        PTokens ptokensNode5 = (PTokens)nodeArrayList3.get(0);
+        PIgnTokens pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
+        PProductions pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
+        PAst pastNode8 = (PAst)nodeArrayList6.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new127() /* reduce AAgrammar128Grammar */
+    {
+        List<?> nodeArrayList7 = pop();
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        List<TPkgId> listNode3 = listNode2;
+        PHelpers phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
+        PStates pstatesNode5 = (PStates)nodeArrayList3.get(0);
+        PTokens ptokensNode6 = (PTokens)nodeArrayList4.get(0);
+        PIgnTokens pigntokensNode7 = (PIgnTokens)nodeArrayList5.get(0);
+        PProductions pproductionsNode8 = (PProductions)nodeArrayList6.get(0);
+        PAst pastNode9 = (PAst)nodeArrayList7.get(0);
+        AGrammar pgrammarNode1 = new AGrammar(listNode3, phelpersNode4, pstatesNode5, ptokensNode6, pigntokensNode7, pproductionsNode8, pastNode9);
+
+        checkResult(pgrammarNode1, nodeArrayList1, nodeArrayList7);
+        return Collections.singletonList(pgrammarNode1);
+    }
+
+    private List<?> new128() /* reduce APackage */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode1 = (List<TPkgId>)nodeArrayList2.get(0);
+        List<TPkgId> listNode2 = listNode1;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode2);
+    }
+
+    private List<?> new129() /* reduce AApkgname1PkgName */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TPkgId tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+        List<TPkgId> listNode2;
+        if(tpkgidNode1 != null) {
+            listNode2 = Collections.singletonList(tpkgidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
+        }
+        checkResult(listNode2, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode2);
+    }
+
+    private List<?> new130() /* reduce AApkgname2PkgName */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TPkgId tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+        List<TPkgId> listNode2 = (List<TPkgId>)nodeArrayList2.get(0);
+        List<TPkgId> listNode3 = new LinkedList<>();
+        if(tpkgidNode1 != null)
         {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
+            listNode3.add(tpkgidNode1);
         }
+        if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
+            listNode3 = listNode2;
+        } else {
+            listNode3.addAll(listNode2);
         }
+        checkResult(listNode3, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(listNode3);
+    }
 
-        ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode5);
-        }
-        nodeList.add(ptermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
+    private List<?> new131() /* reduce APkgNameTail */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TPkgId tpkgidNode1 = (TPkgId)nodeArrayList2.get(0);
+        checkResult(tpkgidNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(tpkgidNode1);
     }
 
+    private List<?> new132() /* reduce AHelpers */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PHelperDef> listNode2 = (List<PHelperDef>)nodeArrayList2.get(0);
+        List<PHelperDef> listNode3 = listNode2;
+        AHelpers phelpersNode1 = new AHelpers(listNode3);
 
+        checkResult(phelpersNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(phelpersNode1);
+    }
 
-    private List<Object> new195() /* reduce AAlistterm1Term */
+    private List<?> new133() /* reduce AHelperDef */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        PRegExp pregexpNode3 = (PRegExp)nodeArrayList3.get(0);
+        AHelperDef phelperdefNode1 = new AHelperDef(tidNode2, pregexpNode3);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(phelperdefNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(phelperdefNode1);
     }
 
+    private List<?> new134() /* reduce AStates */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TId> listNode2 = (List<TId>)nodeArrayList2.get(0);
+        List<TId> listNode3 = listNode2;
+        AStates pstatesNode1 = new AStates(listNode3);
 
+        checkResult(pstatesNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pstatesNode1);
+    }
 
-    private List<Object> new196() /* reduce AAlistterm2Term */
+    private List<?> new135() /* reduce AAidlist1IdList */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList1.get(0);
+        List<TId> listNode2;
+        if(tidNode1 != null) {
+            listNode2 = Collections.singletonList(tidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
+        }
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
+    }
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
+    private List<?> new136() /* reduce AAidlist2IdList */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList1.get(0);
+        List<TId> listNode2 = (List<TId>)nodeArrayList2.get(0);
+        List<TId> listNode3 = new LinkedList<>();
+        if(tidNode1 != null)
         {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+            listNode3.add(tidNode1);
         }
-
-        ptermNode1 = new AListTerm(tlbktNode2, listNode4);
+        if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
+            listNode3 = listNode2;
+        } else {
+            listNode3.addAll(listNode2);
         }
-        nodeList.add(ptermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new197() /* reduce AAsimpleterm1Term */
+    private List<?> new137() /* reduce AIdListTail */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList2.get(0);
+        checkResult(tidNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(tidNode1);
+    }
 
-        List<Object> nodeArrayList1 = pop();
-        PTerm ptermNode1;
-        {
-            // Block
-        TId tidNode3;
-        tidNode3 = (TId)nodeArrayList1.get(0);
+    private List<?> new138() /* reduce ATokens */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PTokenDef> listNode2 = (List<PTokenDef>)nodeArrayList2.get(0);
+        List<PTokenDef> listNode3 = listNode2;
+        ATokens ptokensNode1 = new ATokens(listNode3);
 
-        ptermNode1 = new ASimpleTerm(null, tidNode3, null);
-        }
-        nodeList.add(ptermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(ptokensNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(ptokensNode1);
     }
 
+    private List<?> new139() /* reduce AAtokendef1TokenDef */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode3 = (TId)nodeArrayList1.get(0);
+        PRegExp pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
+        ATokenDef ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, null, null);
 
+        checkResult(ptokendefNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(ptokendefNode1);
+    }
 
-    private List<Object> new198() /* reduce AAsimpleterm2Term */
+    private List<?> new140() /* reduce AAtokendef2TokenDef */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTerm ptermNode1;
-        {
-            // Block
-        PSpecifier pspecifierNode2;
-        TId tidNode3;
-        pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
-        tidNode3 = (TId)nodeArrayList2.get(0);
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStateList pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
+        TId tidNode3 = (TId)nodeArrayList2.get(0);
+        PRegExp pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
+        ATokenDef ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, null, null);
 
-        ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, null);
-        }
-        nodeList.add(ptermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(ptokendefNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(ptokendefNode1);
     }
 
+    private List<?> new141() /* reduce AAtokendef3TokenDef */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode3 = (TId)nodeArrayList1.get(0);
+        PRegExp pregexpNode4 = (PRegExp)nodeArrayList3.get(0);
+        TSlash tslashNode5 = (TSlash)nodeArrayList4.get(0);
+        PRegExp pregexpNode6 = (PRegExp)nodeArrayList4.get(1);
+        ATokenDef ptokendefNode1 = new ATokenDef(null, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
 
+        checkResult(ptokendefNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(ptokendefNode1);
+    }
 
-    private List<Object> new199() /* reduce AAsimpleterm3Term */
+    private List<?> new142() /* reduce AAtokendef4TokenDef */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTerm ptermNode1;
-        {
-            // Block
-        TId tidNode3;
-        TId tidNode4;
-        tidNode3 = (TId)nodeArrayList1.get(0);
-        tidNode4 = (TId)nodeArrayList2.get(0);
+        List<?> nodeArrayList6 = pop();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PStateList pstatelistNode2 = (PStateList)nodeArrayList1.get(0);
+        TId tidNode3 = (TId)nodeArrayList2.get(0);
+        PRegExp pregexpNode4 = (PRegExp)nodeArrayList4.get(0);
+        TSlash tslashNode5 = (TSlash)nodeArrayList5.get(0);
+        PRegExp pregexpNode6 = (PRegExp)nodeArrayList5.get(1);
+        ATokenDef ptokendefNode1 = new ATokenDef(pstatelistNode2, tidNode3, pregexpNode4, tslashNode5, pregexpNode6);
 
-        ptermNode1 = new ASimpleTerm(null, tidNode3, tidNode4);
-        }
-        nodeList.add(ptermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(ptokendefNode1, nodeArrayList1, nodeArrayList6);
+        return Collections.singletonList(ptokendefNode1);
     }
 
+    private List<?> new143() /* reduce AAstatelist1StateList */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        AStateList pstatelistNode1 = new AStateList(tidNode2, null, Collections.EMPTY_LIST);
 
+        checkResult(pstatelistNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pstatelistNode1);
+    }
 
-    private List<Object> new200() /* reduce AAsimpleterm4Term */
+    private List<?> new144() /* reduce AAstatelist2StateList */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        PTransition ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+        AStateList pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, Collections.EMPTY_LIST);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pstatelistNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pstatelistNode1);
     }
 
+    private List<?> new145() /* reduce AAstatelist3StateList */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        List<PStateListTail> listNode4 = (List<PStateListTail>)nodeArrayList3.get(0);
+        List<PStateListTail> listNode5 = listNode4;
+        AStateList pstatelistNode1 = new AStateList(tidNode2, null, listNode5);
 
+        checkResult(pstatelistNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pstatelistNode1);
+    }
 
-    private List<Object> new201() /* reduce ANullTerm */
+    private List<?> new146() /* reduce AAstatelist4StateList */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PTerm ptermNode1;
-        {
-            // Block
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        PTransition ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+        List<PStateListTail> listNode4 = (List<PStateListTail>)nodeArrayList4.get(0);
+        List<PStateListTail> listNode5 = listNode4;
+        AStateList pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode5);
 
-        ptermNode1 = new ANullTerm();
-        }
-        nodeList.add(ptermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pstatelistNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pstatelistNode1);
     }
 
+    private List<?> new147() /* reduce AAstatelisttail1StateListTail */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        AStateListTail pstatelisttailNode1 = new AStateListTail(tidNode2, null);
 
+        checkResult(pstatelisttailNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pstatelisttailNode1);
+    }
 
-    private List<Object> new202() /* reduce AAlistoflistterm1ListOfListTerm */
+    private List<?> new148() /* reduce AAstatelisttail2StateListTail */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        PTransition ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
+        AStateListTail pstatelisttailNode1 = new AStateListTail(tidNode2, ptransitionNode3);
 
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PListTerm plisttermNode1;
-        plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-        if(plisttermNode1 != null)
-        {
-            listNode2.add(plisttermNode1);
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pstatelisttailNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pstatelisttailNode1);
     }
 
+    private List<?> new149() /* reduce ATransition */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        ATransition ptransitionNode1 = new ATransition(tidNode2);
 
+        checkResult(ptransitionNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(ptransitionNode1);
+    }
 
-    private List<Object> new203() /* reduce AAlistoflistterm2ListOfListTerm */
+    private List<?> new150() /* reduce AAigntokens1IgnTokens */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        AIgnTokens pigntokensNode1 = new AIgnTokens(Collections.EMPTY_LIST);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pigntokensNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pigntokensNode1);
     }
 
+    private List<?> new151() /* reduce AAigntokens2IgnTokens */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TId> listNode2 = (List<TId>)nodeArrayList3.get(0);
+        List<TId> listNode3 = listNode2;
+        AIgnTokens pigntokensNode1 = new AIgnTokens(listNode3);
 
+        checkResult(pigntokensNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pigntokensNode1);
+    }
 
-    private List<Object> new204() /* reduce AAnewlistterm1ListTerm */
+    private List<?> new152() /* reduce ALookAhead */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TSlash tslashNode1 = (TSlash)nodeArrayList1.get(0);
+        PRegExp pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
+        checkResult(tslashNode1, nodeArrayList1, nodeArrayList2);
+        return Arrays.asList(new Object[] {
+            tslashNode1,
+            pregexpNode2,
+        });
+    }
 
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PListTerm plisttermNode1;
-        {
-            // Block
-        PProdName pprodnameNode2;
-        TLPar tlparNode3;
-        LinkedList listNode4 = new LinkedList();
-        pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
-        tlparNode3 = (TLPar)nodeArrayList3.get(0);
-        {
-            // Block
+    private List<?> new153() /* reduce AAregexp1RegExp */
+    {
+        List<?> nodeArrayList1 = pop();
+        PConcat pconcatNode2 = (PConcat)nodeArrayList1.get(0);
+        List<PConcat> listNode3;
+        if(pconcatNode2 != null) {
+            listNode3 = Collections.singletonList(pconcatNode2);
+        } else {
+            listNode3 = Collections.emptyList();
         }
+        ARegExp pregexpNode1 = new ARegExp(listNode3);
 
-        plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode4);
-        }
-        nodeList.add(plisttermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(pregexpNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pregexpNode1);
     }
 
-
-
-    private List<Object> new205() /* reduce AAnewlistterm2ListTerm */
+    private List<?> new154() /* reduce AAregexp2RegExp */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList5 = pop();
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PConcat pconcatNode2 = (PConcat)nodeArrayList1.get(0);
+        List<PConcat> listNode3 = (List<PConcat>)nodeArrayList2.get(0);
+        List<PConcat> listNode4 = new LinkedList<>();
+        if(pconcatNode2 != null)
         {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
+            listNode4.add(pconcatNode2);
         }
+        if (listNode4.isEmpty() && listNode3 instanceof LinkedList<?>) {
+            listNode4 = listNode3;
+        } else {
+            listNode4.addAll(listNode3);
         }
+        ARegExp pregexpNode1 = new ARegExp(listNode4);
 
-        plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode5);
-        }
-        nodeList.add(plisttermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
-        return nodeList;
+        checkResult(pregexpNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pregexpNode1);
     }
 
-
-
-    private List<Object> new206() /* reduce AAsimplelistterm1ListTerm */
+    private List<?> new155() /* reduce ARegExpTail */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PConcat pconcatNode1 = (PConcat)nodeArrayList2.get(0);
+        checkResult(pconcatNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pconcatNode1);
+    }
 
-        List<Object> nodeArrayList1 = pop();
-        PListTerm plisttermNode1;
-        {
-            // Block
-        TId tidNode3;
-        tidNode3 = (TId)nodeArrayList1.get(0);
+    private List<?> new156() /* reduce AAconcat1Concat */
+    {
+        AConcat pconcatNode1 = new AConcat(Collections.EMPTY_LIST);
 
-        plisttermNode1 = new ASimpleListTerm(null, tidNode3, null);
-        }
-        nodeList.add(plisttermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        return Collections.singletonList(pconcatNode1);
     }
 
+    private List<?> new157() /* reduce AAconcat2Concat */
+    {
+        List<?> nodeArrayList1 = pop();
+        List<PUnExp> listNode2 = (List<PUnExp>)nodeArrayList1.get(0);
+        List<PUnExp> listNode3 = listNode2;
+        AConcat pconcatNode1 = new AConcat(listNode3);
 
+        checkResult(pconcatNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pconcatNode1);
+    }
 
-    private List<Object> new207() /* reduce AAsimplelistterm2ListTerm */
+    private List<?> new158() /* reduce AAunexp1UnExp */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        PBasic pbasicNode2 = (PBasic)nodeArrayList1.get(0);
+        AUnExp punexpNode1 = new AUnExp(pbasicNode2, null);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PListTerm plisttermNode1;
-        {
-            // Block
-        PSpecifier pspecifierNode2;
-        TId tidNode3;
-        pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
-        tidNode3 = (TId)nodeArrayList2.get(0);
-
-        plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, null);
-        }
-        nodeList.add(plisttermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(punexpNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(punexpNode1);
     }
 
+    private List<?> new159() /* reduce AAunexp2UnExp */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PBasic pbasicNode2 = (PBasic)nodeArrayList1.get(0);
+        PUnOp punopNode3 = (PUnOp)nodeArrayList2.get(0);
+        AUnExp punexpNode1 = new AUnExp(pbasicNode2, punopNode3);
 
+        checkResult(punexpNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(punexpNode1);
+    }
 
-    private List<Object> new208() /* reduce AAsimplelistterm3ListTerm */
+    private List<?> new160() /* reduce ACharBasic */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PListTerm plisttermNode1;
-        {
-            // Block
-        TId tidNode3;
-        TId tidNode4;
-        tidNode3 = (TId)nodeArrayList1.get(0);
-        tidNode4 = (TId)nodeArrayList2.get(0);
+        List<?> nodeArrayList1 = pop();
+        PChar pcharNode2 = (PChar)nodeArrayList1.get(0);
+        ACharBasic pbasicNode1 = new ACharBasic(pcharNode2);
 
-        plisttermNode1 = new ASimpleListTerm(null, tidNode3, tidNode4);
-        }
-        nodeList.add(plisttermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pbasicNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pbasicNode1);
     }
 
+    private List<?> new161() /* reduce ASetBasic */
+    {
+        List<?> nodeArrayList1 = pop();
+        PSet psetNode2 = (PSet)nodeArrayList1.get(0);
+        ASetBasic pbasicNode1 = new ASetBasic(psetNode2);
 
+        checkResult(pbasicNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pbasicNode1);
+    }
 
-    private List<Object> new209() /* reduce AAsimplelistterm4ListTerm */
+    private List<?> new162() /* reduce AStringBasic */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        TString tstringNode2 = (TString)nodeArrayList1.get(0);
+        AStringBasic pbasicNode1 = new AStringBasic(tstringNode2);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(pbasicNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pbasicNode1);
     }
 
+    private List<?> new163() /* reduce AIdBasic */
+    {
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        AIdBasic pbasicNode1 = new AIdBasic(tidNode2);
 
+        checkResult(pbasicNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pbasicNode1);
+    }
 
-    private List<Object> new210() /* reduce AListTermTail */
+    private List<?> new164() /* reduce ARegExpBasic */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PRegExp pregexpNode2 = (PRegExp)nodeArrayList2.get(0);
+        ARegExpBasic pbasicNode1 = new ARegExpBasic(pregexpNode2);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PListTerm plisttermNode1;
-        plisttermNode1 = (PListTerm)nodeArrayList2.get(0);
-        nodeList.add(plisttermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pbasicNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pbasicNode1);
     }
 
+    private List<?> new165() /* reduce ACharChar */
+    {
+        List<?> nodeArrayList1 = pop();
+        TChar tcharNode2 = (TChar)nodeArrayList1.get(0);
+        ACharChar pcharNode1 = new ACharChar(tcharNode2);
 
+        checkResult(pcharNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pcharNode1);
+    }
 
-    private List<Object> new211() /* reduce ASimpleTermTail */
+    private List<?> new166() /* reduce ADecChar */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        TDecChar tdeccharNode2 = (TDecChar)nodeArrayList1.get(0);
+        ADecChar pcharNode1 = new ADecChar(tdeccharNode2);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TId tidNode1;
-        tidNode1 = (TId)nodeArrayList2.get(0);
-        nodeList.add(tidNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pcharNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pcharNode1);
     }
 
+    private List<?> new167() /* reduce AHexChar */
+    {
+        List<?> nodeArrayList1 = pop();
+        THexChar thexcharNode2 = (THexChar)nodeArrayList1.get(0);
+        AHexChar pcharNode1 = new AHexChar(thexcharNode2);
 
+        checkResult(pcharNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pcharNode1);
+    }
 
-    private List<Object> new212() /* reduce AAprodname1ProdName */
+    private List<?> new168() /* reduce AOperationSet */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PBasic pbasicNode2 = (PBasic)nodeArrayList2.get(0);
+        PBinOp pbinopNode3 = (PBinOp)nodeArrayList3.get(0);
+        PBasic pbasicNode4 = (PBasic)nodeArrayList4.get(0);
+        AOperationSet psetNode1 = new AOperationSet(pbasicNode2, pbinopNode3, pbasicNode4);
 
-        List<Object> nodeArrayList1 = pop();
-        PProdName pprodnameNode1;
-        {
-            // Block
-        TId tidNode2;
-        tidNode2 = (TId)nodeArrayList1.get(0);
+        checkResult(psetNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(psetNode1);
+    }
 
-        pprodnameNode1 = new AProdName(tidNode2, null);
-        }
-        nodeList.add(pprodnameNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+    private List<?> new169() /* reduce AIntervalSet */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PChar pcharNode2 = (PChar)nodeArrayList2.get(0);
+        PChar pcharNode3 = (PChar)nodeArrayList4.get(0);
+        AIntervalSet psetNode1 = new AIntervalSet(pcharNode2, pcharNode3);
+
+        checkResult(psetNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(psetNode1);
     }
 
+    private List<?> new170() /* reduce AStarUnOp */
+    {
+        List<?> nodeArrayList1 = pop();
+        TStar tstarNode2 = (TStar)nodeArrayList1.get(0);
+        AStarUnOp punopNode1 = new AStarUnOp(tstarNode2);
 
+        checkResult(punopNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(punopNode1);
+    }
 
-    private List<Object> new213() /* reduce AAprodname2ProdName */
+    private List<?> new171() /* reduce AQMarkUnOp */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        TQMark tqmarkNode2 = (TQMark)nodeArrayList1.get(0);
+        AQMarkUnOp punopNode1 = new AQMarkUnOp(tqmarkNode2);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PProdName pprodnameNode1;
-        {
-            // Block
-        TId tidNode2;
-        TId tidNode3;
-        tidNode2 = (TId)nodeArrayList1.get(0);
-        tidNode3 = (TId)nodeArrayList2.get(0);
+        checkResult(punopNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(punopNode1);
+    }
 
-        pprodnameNode1 = new AProdName(tidNode2, tidNode3);
-        }
-        nodeList.add(pprodnameNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+    private List<?> new172() /* reduce APlusUnOp */
+    {
+        List<?> nodeArrayList1 = pop();
+        TPlus tplusNode2 = (TPlus)nodeArrayList1.get(0);
+        APlusUnOp punopNode1 = new APlusUnOp(tplusNode2);
+
+        checkResult(punopNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(punopNode1);
     }
 
+    private List<?> new173() /* reduce APlusBinOp */
+    {
+        List<?> nodeArrayList1 = pop();
+        APlusBinOp pbinopNode1 = new APlusBinOp();
 
+        checkResult(pbinopNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pbinopNode1);
+    }
 
-    private List<Object> new214() /* reduce AProdNameTail */
+    private List<?> new174() /* reduce AMinusBinOp */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        AMinusBinOp pbinopNode1 = new AMinusBinOp();
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TId tidNode1;
-        tidNode1 = (TId)nodeArrayList2.get(0);
-        nodeList.add(tidNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pbinopNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pbinopNode1);
     }
 
+    private List<?> new175() /* reduce AProductions */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PProd> listNode2 = (List<PProd>)nodeArrayList2.get(0);
+        List<PProd> listNode3 = listNode2;
+        AProductions pproductionsNode1 = new AProductions(listNode3);
 
+        checkResult(pproductionsNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pproductionsNode1);
+    }
 
-    private List<Object> new215() /* reduce AAparams1Params */
+    private List<?> new176() /* reduce AAprod1Prod */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        List<PAlt> listNode5 = (List<PAlt>)nodeArrayList3.get(0);
+        List<PAlt> listNode6 = listNode5;
+        AProd pprodNode1 = new AProd(tidNode2, null, Collections.EMPTY_LIST, listNode6);
 
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PTerm ptermNode1;
-        ptermNode1 = (PTerm)nodeArrayList1.get(0);
-        if(ptermNode1 != null)
-        {
-            listNode2.add(ptermNode1);
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pprodNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pprodNode1);
     }
 
+    private List<?> new177() /* reduce AAprod2Prod */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        TArrow tarrowNode3 = (TArrow)nodeArrayList2.get(0);
+        List<PElem> listNode4 = (List<PElem>)nodeArrayList2.get(1);
+        List<PElem> listNode5 = listNode4;
+        List<PAlt> listNode6 = (List<PAlt>)nodeArrayList4.get(0);
+        List<PAlt> listNode7 = listNode6;
+        AProd pprodNode1 = new AProd(tidNode2, tarrowNode3, listNode5, listNode7);
 
+        checkResult(pprodNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(pprodNode1);
+    }
 
-    private List<Object> new216() /* reduce AAparams2Params */
+    private List<?> new178() /* reduce AAprodtransform1ProdTransform */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TArrow tarrowNode1 = (TArrow)nodeArrayList2.get(0);
+        checkResult(tarrowNode1, nodeArrayList1, nodeArrayList3);
+        return Arrays.asList(new Object[] {
+            tarrowNode1,
+            Collections.EMPTY_LIST,
+        });
+    }
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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);
+    private List<?> new179() /* reduce AAprodtransform2ProdTransform */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TArrow tarrowNode1 = (TArrow)nodeArrayList2.get(0);
+        List<PElem> listNode2 = (List<PElem>)nodeArrayList3.get(0);
+        List<PElem> listNode3 = listNode2;
+        checkResult(tarrowNode1, nodeArrayList1, nodeArrayList4);
+        return Arrays.asList(new Object[] {
+            tarrowNode1,
+            listNode3,
+        });
+    }
+
+    private List<?> new180() /* reduce AAalts1Alts */
+    {
+        List<?> nodeArrayList1 = pop();
+        PAlt paltNode1 = (PAlt)nodeArrayList1.get(0);
+        List<PAlt> listNode2;
+        if(paltNode1 != null) {
+            listNode2 = Collections.singletonList(paltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        if(listNode2 != null)
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
+    }
+
+    private List<?> new181() /* reduce AAalts2Alts */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PAlt paltNode1 = (PAlt)nodeArrayList1.get(0);
+        List<PAlt> listNode2 = (List<PAlt>)nodeArrayList2.get(0);
+        List<PAlt> listNode3 = new LinkedList<>();
+        if(paltNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
+            listNode3.add(paltNode1);
         }
+        if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
+            listNode3 = listNode2;
+        } else {
+            listNode3.addAll(listNode2);
         }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
+    private List<?> new182() /* reduce AAltsTail */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PAlt paltNode1 = (PAlt)nodeArrayList2.get(0);
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(paltNode1);
+    }
 
-
-    private List<Object> new217() /* reduce AParamsTail */
+    private List<?> new183() /* reduce AAalt1Alt */
     {
-        List<Object> nodeList = new ArrayList<>();
+        AAlt paltNode1 = new AAlt(null, Collections.EMPTY_LIST, null);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PTerm ptermNode1;
-        ptermNode1 = (PTerm)nodeArrayList2.get(0);
-        nodeList.add(ptermNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        return Collections.singletonList(paltNode1);
     }
 
+    private List<?> new184() /* reduce AAalt2Alt */
+    {
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        AAlt paltNode1 = new AAlt(tidNode2, Collections.EMPTY_LIST, null);
 
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(paltNode1);
+    }
 
-    private List<Object> new218() /* reduce AAltName */
+    private List<?> new185() /* reduce AAalt3Alt */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        List<PElem> listNode3 = (List<PElem>)nodeArrayList1.get(0);
+        List<PElem> listNode4 = listNode3;
+        AAlt paltNode1 = new AAlt(null, listNode4, null);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TId tidNode1;
-        tidNode1 = (TId)nodeArrayList2.get(0);
-        nodeList.add(tidNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(paltNode1);
     }
 
+    private List<?> new186() /* reduce AAalt4Alt */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        List<PElem> listNode3 = (List<PElem>)nodeArrayList2.get(0);
+        List<PElem> listNode4 = listNode3;
+        AAlt paltNode1 = new AAlt(tidNode2, listNode4, null);
 
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(paltNode1);
+    }
 
-    private List<Object> new219() /* reduce AAelem1Elem */
+    private List<?> new187() /* reduce AAalt5Alt */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
-        {
-            // Block
-        TId tidNode4;
-        tidNode4 = (TId)nodeArrayList1.get(0);
+        List<?> nodeArrayList1 = pop();
+        PAltTransform palttransformNode4 = (PAltTransform)nodeArrayList1.get(0);
+        AAlt paltNode1 = new AAlt(null, Collections.EMPTY_LIST, palttransformNode4);
 
-        pelemNode1 = new AElem(null, null, tidNode4, null);
-        }
-        nodeList.add(pelemNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(paltNode1);
     }
 
+    private List<?> new188() /* reduce AAalt6Alt */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        PAltTransform palttransformNode4 = (PAltTransform)nodeArrayList2.get(0);
+        AAlt paltNode1 = new AAlt(tidNode2, Collections.EMPTY_LIST, palttransformNode4);
 
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(paltNode1);
+    }
 
-    private List<Object> new220() /* reduce AAelem2Elem */
+    private List<?> new189() /* reduce AAalt7Alt */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PElem> listNode3 = (List<PElem>)nodeArrayList1.get(0);
+        List<PElem> listNode4 = listNode3;
+        PAltTransform palttransformNode5 = (PAltTransform)nodeArrayList2.get(0);
+        AAlt paltNode1 = new AAlt(null, listNode4, palttransformNode5);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
-        {
-            // Block
-        TId tidNode2;
-        TId tidNode4;
-        tidNode2 = (TId)nodeArrayList1.get(0);
-        tidNode4 = (TId)nodeArrayList2.get(0);
-
-        pelemNode1 = new AElem(tidNode2, null, tidNode4, null);
-        }
-        nodeList.add(pelemNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(paltNode1);
     }
 
+    private List<?> new190() /* reduce AAalt8Alt */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        List<PElem> listNode3 = (List<PElem>)nodeArrayList2.get(0);
+        List<PElem> listNode4 = listNode3;
+        PAltTransform palttransformNode5 = (PAltTransform)nodeArrayList3.get(0);
+        AAlt paltNode1 = new AAlt(tidNode2, listNode4, palttransformNode5);
 
+        checkResult(paltNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(paltNode1);
+    }
 
-    private List<Object> new221() /* reduce AAelem3Elem */
+    private List<?> new191() /* reduce AAalttransform1AltTransform */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
-        {
-            // Block
-        PSpecifier pspecifierNode3;
-        TId tidNode4;
-        pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
-        tidNode4 = (TId)nodeArrayList2.get(0);
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TLBrace tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
+        TRBrace trbraceNode4 = (TRBrace)nodeArrayList3.get(0);
+        AAltTransform palttransformNode1 = new AAltTransform(tlbraceNode2, Collections.EMPTY_LIST, trbraceNode4);
 
-        pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, null);
-        }
-        nodeList.add(pelemNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(palttransformNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(palttransformNode1);
     }
 
+    private List<?> new192() /* reduce AAalttransform2AltTransform */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TLBrace tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
+        List<PTerm> listNode3 = (List<PTerm>)nodeArrayList3.get(0);
+        List<PTerm> listNode4 = listNode3;
+        TRBrace trbraceNode5 = (TRBrace)nodeArrayList4.get(0);
+        AAltTransform palttransformNode1 = new AAltTransform(tlbraceNode2, listNode4, trbraceNode5);
 
+        checkResult(palttransformNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(palttransformNode1);
+    }
 
-    private List<Object> new222() /* reduce AAelem4Elem */
+    private List<?> new193() /* reduce AAnewterm1Term */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PProdName pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        TLPar tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        ANewTerm ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, Collections.EMPTY_LIST);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
-        {
-            // Block
-        TId tidNode2;
-        PSpecifier pspecifierNode3;
-        TId tidNode4;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(ptermNode1);
     }
 
+    private List<?> new194() /* reduce AAnewterm2Term */
+    {
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PProdName pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        TLPar tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        List<PTerm> listNode4 = (List<PTerm>)nodeArrayList4.get(0);
+        List<PTerm> listNode5 = listNode4;
+        ANewTerm ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode5);
 
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(ptermNode1);
+    }
 
-    private List<Object> new223() /* reduce AAelem5Elem */
+    private List<?> new195() /* reduce AAlistterm1Term */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TLBkt tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
+        AListTerm ptermNode1 = new AListTerm(tlbktNode2, Collections.EMPTY_LIST);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
-        {
-            // Block
-        TId tidNode4;
-        PUnOp punopNode5;
-        tidNode4 = (TId)nodeArrayList1.get(0);
-        punopNode5 = (PUnOp)nodeArrayList2.get(0);
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(ptermNode1);
+    }
 
-        pelemNode1 = new AElem(null, null, tidNode4, punopNode5);
-        }
-        nodeList.add(pelemNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+    private List<?> new196() /* reduce AAlistterm2Term */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TLBkt tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
+        List<PListTerm> listNode3 = (List<PListTerm>)nodeArrayList2.get(0);
+        List<PListTerm> listNode4 = listNode3;
+        AListTerm ptermNode1 = new AListTerm(tlbktNode2, listNode4);
+
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(ptermNode1);
     }
 
+    private List<?> new197() /* reduce AAsimpleterm1Term */
+    {
+        List<?> nodeArrayList1 = pop();
+        TId tidNode3 = (TId)nodeArrayList1.get(0);
+        ASimpleTerm ptermNode1 = new ASimpleTerm(null, tidNode3, null);
 
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(ptermNode1);
+    }
 
-    private List<Object> new224() /* reduce AAelem6Elem */
+    private List<?> new198() /* reduce AAsimpleterm2Term */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PSpecifier pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        TId tidNode3 = (TId)nodeArrayList2.get(0);
+        ASimpleTerm ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, null);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
-        {
-            // Block
-        TId tidNode2;
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(ptermNode1);
     }
 
+    private List<?> new199() /* reduce AAsimpleterm3Term */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode3 = (TId)nodeArrayList1.get(0);
+        TId tidNode4 = (TId)nodeArrayList2.get(0);
+        ASimpleTerm ptermNode1 = new ASimpleTerm(null, tidNode3, tidNode4);
 
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(ptermNode1);
+    }
 
-    private List<Object> new225() /* reduce AAelem7Elem */
+    private List<?> new200() /* reduce AAsimpleterm4Term */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PSpecifier pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        TId tidNode3 = (TId)nodeArrayList2.get(0);
+        TId tidNode4 = (TId)nodeArrayList3.get(0);
+        ASimpleTerm ptermNode1 = new ASimpleTerm(pspecifierNode2, tidNode3, tidNode4);
 
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
-        {
-            // Block
-        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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
-        return nodeList;
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(ptermNode1);
     }
 
+    private List<?> new201() /* reduce ANullTerm */
+    {
+        List<?> nodeArrayList1 = pop();
+        ANullTerm ptermNode1 = new ANullTerm();
 
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(ptermNode1);
+    }
 
-    private List<Object> new226() /* reduce AAelem8Elem */
+    private List<?> new202() /* reduce AAlistoflistterm1ListOfListTerm */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        PListTerm plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+        List<PListTerm> listNode2;
+        if(plisttermNode1 != null) {
+            listNode2 = Collections.singletonList(plisttermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
+        }
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
+    }
 
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PElem pelemNode1;
+    private List<?> new203() /* reduce AAlistoflistterm2ListOfListTerm */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PListTerm plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+        List<PListTerm> listNode2 = (List<PListTerm>)nodeArrayList2.get(0);
+        List<PListTerm> listNode3 = new LinkedList<>();
+        if(plisttermNode1 != null)
         {
-            // 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);
+            listNode3.add(plisttermNode1);
         }
-        nodeList.add(pelemNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
+            listNode3 = listNode2;
+        } else {
+            listNode3.addAll(listNode2);
+        }
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
+    private List<?> new204() /* reduce AAnewlistterm1ListTerm */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PProdName pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        TLPar tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        ANewListTerm plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, Collections.EMPTY_LIST);
 
+        checkResult(plisttermNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(plisttermNode1);
+    }
 
-    private List<Object> new227() /* reduce AElemName */
+    private List<?> new205() /* reduce AAnewlistterm2ListTerm */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList5 = pop();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PProdName pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
+        TLPar tlparNode3 = (TLPar)nodeArrayList3.get(0);
+        List<PTerm> listNode4 = (List<PTerm>)nodeArrayList4.get(0);
+        List<PTerm> listNode5 = listNode4;
+        ANewListTerm plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode5);
 
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        TId tidNode1;
-        tidNode1 = (TId)nodeArrayList2.get(0);
-        nodeList.add(tidNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(plisttermNode1, nodeArrayList1, nodeArrayList5);
+        return Collections.singletonList(plisttermNode1);
     }
 
+    private List<?> new206() /* reduce AAsimplelistterm1ListTerm */
+    {
+        List<?> nodeArrayList1 = pop();
+        TId tidNode3 = (TId)nodeArrayList1.get(0);
+        ASimpleListTerm plisttermNode1 = new ASimpleListTerm(null, tidNode3, null);
 
+        checkResult(plisttermNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(plisttermNode1);
+    }
 
-    private List<Object> new228() /* reduce ATokenSpecifier */
+    private List<?> new207() /* reduce AAsimplelistterm2ListTerm */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PSpecifier pspecifierNode1;
-        {
-            // Block
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PSpecifier pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        TId tidNode3 = (TId)nodeArrayList2.get(0);
+        ASimpleListTerm plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, null);
 
-        pspecifierNode1 = new ATokenSpecifier();
-        }
-        nodeList.add(pspecifierNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(plisttermNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(plisttermNode1);
     }
 
+    private List<?> new208() /* reduce AAsimplelistterm3ListTerm */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode3 = (TId)nodeArrayList1.get(0);
+        TId tidNode4 = (TId)nodeArrayList2.get(0);
+        ASimpleListTerm plisttermNode1 = new ASimpleListTerm(null, tidNode3, tidNode4);
 
+        checkResult(plisttermNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(plisttermNode1);
+    }
 
-    private List<Object> new229() /* reduce AProductionSpecifier */
+    private List<?> new209() /* reduce AAsimplelistterm4ListTerm */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PSpecifier pspecifierNode2 = (PSpecifier)nodeArrayList1.get(0);
+        TId tidNode3 = (TId)nodeArrayList2.get(0);
+        TId tidNode4 = (TId)nodeArrayList3.get(0);
+        ASimpleListTerm plisttermNode1 = new ASimpleListTerm(pspecifierNode2, tidNode3, tidNode4);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PSpecifier pspecifierNode1;
-        {
-            // Block
-
-        pspecifierNode1 = new AProductionSpecifier();
-        }
-        nodeList.add(pspecifierNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(plisttermNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(plisttermNode1);
     }
 
+    private List<?> new210() /* reduce AListTermTail */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PListTerm plisttermNode1 = (PListTerm)nodeArrayList2.get(0);
+        checkResult(plisttermNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(plisttermNode1);
+    }
 
-
-    private List<Object> new230() /* reduce AAst */
+    private List<?> new211() /* reduce ASimpleTermTail */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList2.get(0);
+        checkResult(tidNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(tidNode1);
+    }
 
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PAst pastNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList4.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
+    private List<?> new212() /* reduce AAprodname1ProdName */
+    {
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        AProdName pprodnameNode1 = new AProdName(tidNode2, null);
 
-        pastNode1 = new AAst(listNode3);
-        }
-        nodeList.add(pastNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+        checkResult(pprodnameNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pprodnameNode1);
     }
 
+    private List<?> new213() /* reduce AAprodname2ProdName */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        TId tidNode3 = (TId)nodeArrayList2.get(0);
+        AProdName pprodnameNode1 = new AProdName(tidNode2, tidNode3);
 
+        checkResult(pprodnameNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pprodnameNode1);
+    }
 
-    private List<Object> new231() /* reduce AAstProd */
+    private List<?> new214() /* reduce AProdNameTail */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList2.get(0);
+        checkResult(tidNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(tidNode1);
+    }
 
-        List<Object> nodeArrayList4 = pop();
-        List<Object> nodeArrayList3 = pop();
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
+    private List<?> new215() /* reduce AAparams1Params */
+    {
+        List<?> nodeArrayList1 = pop();
+        PTerm ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        List<PTerm> listNode2;
+        if(ptermNode1 != null) {
+            listNode2 = Collections.singletonList(ptermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
+        }
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
+    }
+
+    private List<?> new216() /* reduce AAparams2Params */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTerm ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        List<PTerm> listNode2 = (List<PTerm>)nodeArrayList2.get(0);
+        List<PTerm> listNode3 = new LinkedList<>();
+        if(ptermNode1 != null)
         {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
+            listNode3.add(ptermNode1);
         }
+        if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
+            listNode3 = listNode2;
+        } else {
+            listNode3.addAll(listNode2);
         }
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
+    }
 
-        pastprodNode1 = new AAstProd(tidNode2, listNode4);
-        }
-        nodeList.add(pastprodNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
-        return nodeList;
+    private List<?> new217() /* reduce AParamsTail */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PTerm ptermNode1 = (PTerm)nodeArrayList2.get(0);
+        checkResult(ptermNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(ptermNode1);
+    }
+
+    private List<?> new218() /* reduce AAltName */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList2.get(0);
+        checkResult(tidNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(tidNode1);
     }
 
+    private List<?> new219() /* reduce AAelem1Elem */
+    {
+        List<?> nodeArrayList1 = pop();
+        TId tidNode4 = (TId)nodeArrayList1.get(0);
+        AElem pelemNode1 = new AElem(null, null, tidNode4, null);
 
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pelemNode1);
+    }
 
-    private List<Object> new232() /* reduce AAastalts1AstAlts */
+    private List<?> new220() /* reduce AAelem2Elem */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        TId tidNode4 = (TId)nodeArrayList2.get(0);
+        AElem pelemNode1 = new AElem(tidNode2, null, tidNode4, null);
 
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PAstAlt pastaltNode1;
-        pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-        if(pastaltNode1 != null)
-        {
-            listNode2.add(pastaltNode1);
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pelemNode1);
+    }
+
+    private List<?> new221() /* reduce AAelem3Elem */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PSpecifier pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
+        TId tidNode4 = (TId)nodeArrayList2.get(0);
+        AElem pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, null);
+
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pelemNode1);
     }
 
+    private List<?> new222() /* reduce AAelem4Elem */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        PSpecifier pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
+        TId tidNode4 = (TId)nodeArrayList3.get(0);
+        AElem pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, null);
 
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pelemNode1);
+    }
 
-    private List<Object> new233() /* reduce AAastalts2AstAlts */
+    private List<?> new223() /* reduce AAelem5Elem */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode4 = (TId)nodeArrayList1.get(0);
+        PUnOp punopNode5 = (PUnOp)nodeArrayList2.get(0);
+        AElem pelemNode1 = new AElem(null, null, tidNode4, punopNode5);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pelemNode1);
     }
 
+    private List<?> new224() /* reduce AAelem6Elem */
+    {
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        TId tidNode4 = (TId)nodeArrayList2.get(0);
+        PUnOp punopNode5 = (PUnOp)nodeArrayList3.get(0);
+        AElem pelemNode1 = new AElem(tidNode2, null, tidNode4, punopNode5);
 
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pelemNode1);
+    }
 
-    private List<Object> new234() /* reduce AAstAltsTail */
+    private List<?> new225() /* reduce AAelem7Elem */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PSpecifier pspecifierNode3 = (PSpecifier)nodeArrayList1.get(0);
+        TId tidNode4 = (TId)nodeArrayList2.get(0);
+        PUnOp punopNode5 = (PUnOp)nodeArrayList3.get(0);
+        AElem pelemNode1 = new AElem(null, pspecifierNode3, tidNode4, punopNode5);
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PAstAlt pastaltNode1;
-        pastaltNode1 = (PAstAlt)nodeArrayList2.get(0);
-        nodeList.add(pastaltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList3);
+        return Collections.singletonList(pelemNode1);
     }
 
+    private List<?> new226() /* reduce AAelem8Elem */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        PSpecifier pspecifierNode3 = (PSpecifier)nodeArrayList2.get(0);
+        TId tidNode4 = (TId)nodeArrayList3.get(0);
+        PUnOp punopNode5 = (PUnOp)nodeArrayList4.get(0);
+        AElem pelemNode1 = new AElem(tidNode2, pspecifierNode3, tidNode4, punopNode5);
 
+        checkResult(pelemNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pelemNode1);
+    }
 
-    private List<Object> new235() /* reduce AAastalt1AstAlt */
+    private List<?> new227() /* reduce AElemName */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList2.get(0);
+        checkResult(tidNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(tidNode1);
+    }
 
-        PAstAlt pastaltNode1;
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        {
-            // Block
-        }
+    private List<?> new228() /* reduce ATokenSpecifier */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        ATokenSpecifier pspecifierNode1 = new ATokenSpecifier();
 
-        pastaltNode1 = new AAstAlt(null, listNode3);
-        }
-        nodeList.add(pastaltNode1);
-        return nodeList;
+        checkResult(pspecifierNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pspecifierNode1);
     }
 
+    private List<?> new229() /* reduce AProductionSpecifier */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        AProductionSpecifier pspecifierNode1 = new AProductionSpecifier();
 
+        checkResult(pspecifierNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pspecifierNode1);
+    }
 
-    private List<Object> new236() /* reduce AAastalt2AstAlt */
+    private List<?> new230() /* reduce AAst */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PAstProd> listNode2 = (List<PAstProd>)nodeArrayList4.get(0);
+        List<PAstProd> listNode3 = listNode2;
+        AAst pastNode1 = new AAst(listNode3);
 
-        List<Object> 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);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pastNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pastNode1);
     }
 
+    private List<?> new231() /* reduce AAstProd */
+    {
+        List<?> nodeArrayList4 = pop();
+        List<?> nodeArrayList3 = pop();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        List<PAstAlt> listNode3 = (List<PAstAlt>)nodeArrayList3.get(0);
+        List<PAstAlt> listNode4 = listNode3;
+        AAstProd pastprodNode1 = new AAstProd(tidNode2, listNode4);
 
+        checkResult(pastprodNode1, nodeArrayList1, nodeArrayList4);
+        return Collections.singletonList(pastprodNode1);
+    }
 
-    private List<Object> new237() /* reduce AAastalt3AstAlt */
+    private List<?> new232() /* reduce AAastalts1AstAlts */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        PAstAlt pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+        List<PAstAlt> listNode2;
+        if(pastaltNode1 != null) {
+            listNode2 = Collections.singletonList(pastaltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
+        }
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
+    }
 
-        List<Object> nodeArrayList1 = pop();
-        PAstAlt pastaltNode1;
-        {
-            // Block
-        LinkedList listNode4 = new LinkedList();
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList1.get(0);
-        if(listNode3 != null)
+    private List<?> new233() /* reduce AAastalts2AstAlts */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PAstAlt pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+        List<PAstAlt> listNode2 = (List<PAstAlt>)nodeArrayList2.get(0);
+        List<PAstAlt> listNode3 = new LinkedList<>();
+        if(pastaltNode1 != null)
         {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+            listNode3.add(pastaltNode1);
         }
-
-        pastaltNode1 = new AAstAlt(null, listNode4);
+        if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
+            listNode3 = listNode2;
+        } else {
+            listNode3.addAll(listNode2);
         }
-        nodeList.add(pastaltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new238() /* reduce AAastalt4AstAlt */
+    private List<?> new234() /* reduce AAstAltsTail */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        PAstAlt pastaltNode1 = (PAstAlt)nodeArrayList2.get(0);
+        checkResult(pastaltNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pastaltNode1);
+    }
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> nodeArrayList1 = pop();
-        PAstAlt pastaltNode1;
-        {
-            // Block
-        TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
-        tidNode2 = (TId)nodeArrayList1.get(0);
-        {
-            // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
-        }
+    private List<?> new235() /* reduce AAastalt1AstAlt */
+    {
+        AAstAlt pastaltNode1 = new AAstAlt(null, Collections.EMPTY_LIST);
 
-        pastaltNode1 = new AAstAlt(tidNode2, listNode4);
-        }
-        nodeList.add(pastaltNode1);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        return Collections.singletonList(pastaltNode1);
     }
 
+    private List<?> new236() /* reduce AAastalt2AstAlt */
+    {
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        AAstAlt pastaltNode1 = new AAstAlt(tidNode2, Collections.EMPTY_LIST);
 
+        checkResult(pastaltNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pastaltNode1);
+    }
 
-    private List<Object> new239() /* reduce ATerminal$PkgNameTail */
+    private List<?> new237() /* reduce AAastalt3AstAlt */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        List<PElem> listNode3 = (List<PElem>)nodeArrayList1.get(0);
+        List<PElem> listNode4 = listNode3;
+        AAstAlt pastaltNode1 = new AAstAlt(null, listNode4);
 
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        TPkgId tpkgidNode1;
-        tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-        if(tpkgidNode1 != null)
-        {
-            listNode2.add(tpkgidNode1);
-        }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(pastaltNode1, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(pastaltNode1);
     }
 
+    private List<?> new238() /* reduce AAastalt4AstAlt */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        TId tidNode2 = (TId)nodeArrayList1.get(0);
+        List<PElem> listNode3 = (List<PElem>)nodeArrayList2.get(0);
+        List<PElem> listNode4 = listNode3;
+        AAstAlt pastaltNode1 = new AAstAlt(tidNode2, listNode4);
 
+        checkResult(pastaltNode1, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(pastaltNode1);
+    }
 
-    private List<Object> new240() /* reduce ANonTerminal$PkgNameTail */
+    private List<?> new239() /* reduce ATerminal$PkgNameTail */
     {
-        List<Object> nodeList = new ArrayList<>();
+        List<?> nodeArrayList1 = pop();
+        TPkgId tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
+        List<TPkgId> listNode2;
+        if(tpkgidNode1 != null) {
+            listNode2 = Collections.singletonList(tpkgidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
+        }
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
+    }
 
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+    private List<?> new240() /* reduce ANonTerminal$PkgNameTail */
+    {
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TPkgId> listNode1 = (List<TPkgId>)nodeArrayList1.get(0);
+        TPkgId tpkgidNode2 = (TPkgId)nodeArrayList2.get(0);
+        List<TPkgId> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(tpkgidNode2 != null)
         {
             listNode3.add(tpkgidNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new241() /* reduce ATerminal$HelperDef */
+    private List<?> new241() /* reduce ATerminal$HelperDef */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PHelperDef phelperdefNode1;
-        phelperdefNode1 = (PHelperDef)nodeArrayList1.get(0);
-        if(phelperdefNode1 != null)
-        {
-            listNode2.add(phelperdefNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PHelperDef phelperdefNode1 = (PHelperDef)nodeArrayList1.get(0);
+        List<PHelperDef> listNode2;
+        if(phelperdefNode1 != null) {
+            listNode2 = Collections.singletonList(phelperdefNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new242() /* reduce ANonTerminal$HelperDef */
+    private List<?> new242() /* reduce ANonTerminal$HelperDef */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PHelperDef> listNode1 = (List<PHelperDef>)nodeArrayList1.get(0);
+        PHelperDef phelperdefNode2 = (PHelperDef)nodeArrayList2.get(0);
+        List<PHelperDef> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(phelperdefNode2 != null)
         {
             listNode3.add(phelperdefNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new243() /* reduce ATerminal$IdListTail */
+    private List<?> new243() /* reduce ATerminal$IdListTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        TId tidNode1;
-        tidNode1 = (TId)nodeArrayList1.get(0);
-        if(tidNode1 != null)
-        {
-            listNode2.add(tidNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        TId tidNode1 = (TId)nodeArrayList1.get(0);
+        List<TId> listNode2;
+        if(tidNode1 != null) {
+            listNode2 = Collections.singletonList(tidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new244() /* reduce ANonTerminal$IdListTail */
+    private List<?> new244() /* reduce ANonTerminal$IdListTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<TId> listNode1 = (List<TId>)nodeArrayList1.get(0);
+        TId tidNode2 = (TId)nodeArrayList2.get(0);
+        List<TId> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(tidNode2 != null)
         {
             listNode3.add(tidNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new245() /* reduce ATerminal$TokenDef */
+    private List<?> new245() /* reduce ATerminal$TokenDef */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PTokenDef ptokendefNode1;
-        ptokendefNode1 = (PTokenDef)nodeArrayList1.get(0);
-        if(ptokendefNode1 != null)
-        {
-            listNode2.add(ptokendefNode1);
+        List<?> nodeArrayList1 = pop();
+        PTokenDef ptokendefNode1 = (PTokenDef)nodeArrayList1.get(0);
+        List<PTokenDef> listNode2;
+        if(ptokendefNode1 != null) {
+            listNode2 = Collections.singletonList(ptokendefNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new246() /* reduce ANonTerminal$TokenDef */
+    private List<?> new246() /* reduce ANonTerminal$TokenDef */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PTokenDef> listNode1 = (List<PTokenDef>)nodeArrayList1.get(0);
+        PTokenDef ptokendefNode2 = (PTokenDef)nodeArrayList2.get(0);
+        List<PTokenDef> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(ptokendefNode2 != null)
         {
             listNode3.add(ptokendefNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new247() /* reduce ATerminal$StateListTail */
+    private List<?> new247() /* reduce ATerminal$StateListTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PStateListTail pstatelisttailNode1;
-        pstatelisttailNode1 = (PStateListTail)nodeArrayList1.get(0);
-        if(pstatelisttailNode1 != null)
-        {
-            listNode2.add(pstatelisttailNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PStateListTail pstatelisttailNode1 = (PStateListTail)nodeArrayList1.get(0);
+        List<PStateListTail> listNode2;
+        if(pstatelisttailNode1 != null) {
+            listNode2 = Collections.singletonList(pstatelisttailNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new248() /* reduce ANonTerminal$StateListTail */
+    private List<?> new248() /* reduce ANonTerminal$StateListTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PStateListTail> listNode1 = (List<PStateListTail>)nodeArrayList1.get(0);
+        PStateListTail pstatelisttailNode2 = (PStateListTail)nodeArrayList2.get(0);
+        List<PStateListTail> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(pstatelisttailNode2 != null)
         {
             listNode3.add(pstatelisttailNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new249() /* reduce ATerminal$RegExpTail */
+    private List<?> new249() /* reduce ATerminal$RegExpTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PConcat pconcatNode1;
-        pconcatNode1 = (PConcat)nodeArrayList1.get(0);
-        if(pconcatNode1 != null)
-        {
-            listNode2.add(pconcatNode1);
+        List<?> nodeArrayList1 = pop();
+        PConcat pconcatNode1 = (PConcat)nodeArrayList1.get(0);
+        List<PConcat> listNode2;
+        if(pconcatNode1 != null) {
+            listNode2 = Collections.singletonList(pconcatNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new250() /* reduce ANonTerminal$RegExpTail */
+    private List<?> new250() /* reduce ANonTerminal$RegExpTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PConcat> listNode1 = (List<PConcat>)nodeArrayList1.get(0);
+        PConcat pconcatNode2 = (PConcat)nodeArrayList2.get(0);
+        List<PConcat> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(pconcatNode2 != null)
         {
             listNode3.add(pconcatNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new251() /* reduce ATerminal$UnExp */
+    private List<?> new251() /* reduce ATerminal$UnExp */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PUnExp punexpNode1;
-        punexpNode1 = (PUnExp)nodeArrayList1.get(0);
-        if(punexpNode1 != null)
-        {
-            listNode2.add(punexpNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PUnExp punexpNode1 = (PUnExp)nodeArrayList1.get(0);
+        List<PUnExp> listNode2;
+        if(punexpNode1 != null) {
+            listNode2 = Collections.singletonList(punexpNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new252() /* reduce ANonTerminal$UnExp */
+    private List<?> new252() /* reduce ANonTerminal$UnExp */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PUnExp> listNode1 = (List<PUnExp>)nodeArrayList1.get(0);
+        PUnExp punexpNode2 = (PUnExp)nodeArrayList2.get(0);
+        List<PUnExp> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(punexpNode2 != null)
         {
             listNode3.add(punexpNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new253() /* reduce ATerminal$Prod */
+    private List<?> new253() /* reduce ATerminal$Prod */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PProd pprodNode1;
-        pprodNode1 = (PProd)nodeArrayList1.get(0);
-        if(pprodNode1 != null)
-        {
-            listNode2.add(pprodNode1);
+        List<?> nodeArrayList1 = pop();
+        PProd pprodNode1 = (PProd)nodeArrayList1.get(0);
+        List<PProd> listNode2;
+        if(pprodNode1 != null) {
+            listNode2 = Collections.singletonList(pprodNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new254() /* reduce ANonTerminal$Prod */
+    private List<?> new254() /* reduce ANonTerminal$Prod */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PProd> listNode1 = (List<PProd>)nodeArrayList1.get(0);
+        PProd pprodNode2 = (PProd)nodeArrayList2.get(0);
+        List<PProd> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(pprodNode2 != null)
         {
             listNode3.add(pprodNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new255() /* reduce ATerminal$Elem */
+    private List<?> new255() /* reduce ATerminal$Elem */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PElem pelemNode1;
-        pelemNode1 = (PElem)nodeArrayList1.get(0);
-        if(pelemNode1 != null)
-        {
-            listNode2.add(pelemNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PElem pelemNode1 = (PElem)nodeArrayList1.get(0);
+        List<PElem> listNode2;
+        if(pelemNode1 != null) {
+            listNode2 = Collections.singletonList(pelemNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new256() /* reduce ANonTerminal$Elem */
+    private List<?> new256() /* reduce ANonTerminal$Elem */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PElem> listNode1 = (List<PElem>)nodeArrayList1.get(0);
+        PElem pelemNode2 = (PElem)nodeArrayList2.get(0);
+        List<PElem> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(pelemNode2 != null)
         {
             listNode3.add(pelemNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new257() /* reduce ATerminal$AltsTail */
+    private List<?> new257() /* reduce ATerminal$AltsTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PAlt paltNode1;
-        paltNode1 = (PAlt)nodeArrayList1.get(0);
-        if(paltNode1 != null)
-        {
-            listNode2.add(paltNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PAlt paltNode1 = (PAlt)nodeArrayList1.get(0);
+        List<PAlt> listNode2;
+        if(paltNode1 != null) {
+            listNode2 = Collections.singletonList(paltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new258() /* reduce ANonTerminal$AltsTail */
+    private List<?> new258() /* reduce ANonTerminal$AltsTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PAlt> listNode1 = (List<PAlt>)nodeArrayList1.get(0);
+        PAlt paltNode2 = (PAlt)nodeArrayList2.get(0);
+        List<PAlt> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(paltNode2 != null)
         {
             listNode3.add(paltNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new259() /* reduce ATerminal$Term */
+    private List<?> new259() /* reduce ATerminal$Term */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PTerm ptermNode1;
-        ptermNode1 = (PTerm)nodeArrayList1.get(0);
-        if(ptermNode1 != null)
-        {
-            listNode2.add(ptermNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PTerm ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        List<PTerm> listNode2;
+        if(ptermNode1 != null) {
+            listNode2 = Collections.singletonList(ptermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new260() /* reduce ANonTerminal$Term */
+    private List<?> new260() /* reduce ANonTerminal$Term */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PTerm> listNode1 = (List<PTerm>)nodeArrayList1.get(0);
+        PTerm ptermNode2 = (PTerm)nodeArrayList2.get(0);
+        List<PTerm> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(ptermNode2 != null)
         {
             listNode3.add(ptermNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new261() /* reduce ATerminal$ListTermTail */
+    private List<?> new261() /* reduce ATerminal$ListTermTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PListTerm plisttermNode1;
-        plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-        if(plisttermNode1 != null)
-        {
-            listNode2.add(plisttermNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PListTerm plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
+        List<PListTerm> listNode2;
+        if(plisttermNode1 != null) {
+            listNode2 = Collections.singletonList(plisttermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new262() /* reduce ANonTerminal$ListTermTail */
+    private List<?> new262() /* reduce ANonTerminal$ListTermTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PListTerm> listNode1 = (List<PListTerm>)nodeArrayList1.get(0);
+        PListTerm plisttermNode2 = (PListTerm)nodeArrayList2.get(0);
+        List<PListTerm> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(plisttermNode2 != null)
         {
             listNode3.add(plisttermNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new263() /* reduce ATerminal$ParamsTail */
+    private List<?> new263() /* reduce ATerminal$ParamsTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PTerm ptermNode1;
-        ptermNode1 = (PTerm)nodeArrayList1.get(0);
-        if(ptermNode1 != null)
-        {
-            listNode2.add(ptermNode1);
-        }
+        List<?> nodeArrayList1 = pop();
+        PTerm ptermNode1 = (PTerm)nodeArrayList1.get(0);
+        List<PTerm> listNode2;
+        if(ptermNode1 != null) {
+            listNode2 = Collections.singletonList(ptermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new264() /* reduce ANonTerminal$ParamsTail */
+    private List<?> new264() /* reduce ANonTerminal$ParamsTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PTerm> listNode1 = (List<PTerm>)nodeArrayList1.get(0);
+        PTerm ptermNode2 = (PTerm)nodeArrayList2.get(0);
+        List<PTerm> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(ptermNode2 != null)
         {
             listNode3.add(ptermNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new265() /* reduce ATerminal$AstProd */
+    private List<?> new265() /* reduce ATerminal$AstProd */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PAstProd pastprodNode1;
-        pastprodNode1 = (PAstProd)nodeArrayList1.get(0);
-        if(pastprodNode1 != null)
-        {
-            listNode2.add(pastprodNode1);
+        List<?> nodeArrayList1 = pop();
+        PAstProd pastprodNode1 = (PAstProd)nodeArrayList1.get(0);
+        List<PAstProd> listNode2;
+        if(pastprodNode1 != null) {
+            listNode2 = Collections.singletonList(pastprodNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new266() /* reduce ANonTerminal$AstProd */
+    private List<?> new266() /* reduce ANonTerminal$AstProd */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PAstProd> listNode1 = (List<PAstProd>)nodeArrayList1.get(0);
+        PAstProd pastprodNode2 = (PAstProd)nodeArrayList2.get(0);
+        List<PAstProd> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(pastprodNode2 != null)
         {
             listNode3.add(pastprodNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
-
-
-    private List<Object> new267() /* reduce ATerminal$AstAltsTail */
+    private List<?> new267() /* reduce ATerminal$AstAltsTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
-        {
-            // Block
-        PAstAlt pastaltNode1;
-        pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-        if(pastaltNode1 != null)
-        {
-            listNode2.add(pastaltNode1);
+        List<?> nodeArrayList1 = pop();
+        PAstAlt pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
+        List<PAstAlt> listNode2;
+        if(pastaltNode1 != null) {
+            listNode2 = Collections.singletonList(pastaltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
-        }
-        nodeList.add(listNode2);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
-        return nodeList;
+        checkResult(listNode2, nodeArrayList1, nodeArrayList1);
+        return Collections.singletonList(listNode2);
     }
 
-
-
-    private List<Object> new268() /* reduce ANonTerminal$AstAltsTail */
+    private List<?> new268() /* reduce ANonTerminal$AstAltsTail */
     {
-        List<Object> nodeList = new ArrayList<>();
-
-        List<Object> nodeArrayList2 = pop();
-        List<Object> 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)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
-                listNode3 = listNode1;
-            }
+        List<?> nodeArrayList2 = pop();
+        List<?> nodeArrayList1 = pop();
+        List<PAstAlt> listNode1 = (List<PAstAlt>)nodeArrayList1.get(0);
+        PAstAlt pastaltNode2 = (PAstAlt)nodeArrayList2.get(0);
+        List<PAstAlt> listNode3;
+        if (listNode1 instanceof LinkedList<?>) {
+            listNode3 = listNode1;
+        } else {
+            listNode3 = new LinkedList<>(listNode1);
         }
         if(pastaltNode2 != null)
         {
             listNode3.add(pastaltNode2);
         }
-        }
-        nodeList.add(listNode3);
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
-        return nodeList;
+        checkResult(listNode3, nodeArrayList1, nodeArrayList2);
+        return Collections.singletonList(listNode3);
     }
 
 
-    private static int[][][] actionTable;
+    private static final 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}, },
@@ -10499,7 +6114,7 @@ public class Parser implements IParser
             {{-1, REDUCE, 264}, },
             {{-1, REDUCE, 205}, },
         };*/
-    private static int[][][] gotoTable;
+    private static final int[][][] gotoTable;
 /*      {
             {{-1, 8}, },
             {{-1, 9}, },
@@ -10567,7 +6182,7 @@ public class Parser implements IParser
             {{-1, 155}, },
             {{-1, 322}, },
         };*/
-    private static String[] errorMessages;
+    private static final String[] errorMessages;
 /*      {
             "expecting: 'Package', 'States', 'Helpers', 'Tokens', 'Ignored', 'Productions', 'Abstract', EOF",
             "expecting: pkg id",
@@ -10638,7 +6253,7 @@ public class Parser implements IParser
             "expecting: ')', ','",
             "expecting: 'New', 'Null', 'T', 'P', '[', id",
         };*/
-    private static int[] errors;
+    private static final 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, 
         };*/
@@ -10656,16 +6271,16 @@ public class Parser implements IParser
 
             // read actionTable
             int length = s.readInt();
-            Parser.actionTable = new int[length][][];
-            for(int i = 0; i < Parser.actionTable.length; i++)
+            actionTable = new int[length][][];
+            for(int i = 0; i < actionTable.length; i++)
             {
                 length = s.readInt();
-                Parser.actionTable[i] = new int[length][3];
-                for(int j = 0; j < Parser.actionTable[i].length; j++)
+                actionTable[i] = new int[length][3];
+                for(int j = 0; j < actionTable[i].length; j++)
                 {
                     for(int k = 0; k < 3; k++)
                     {
-                        Parser.actionTable[i][j][k] = s.readInt();
+                        actionTable[i][j][k] = s.readInt();
                     }
                 }
             }
diff --git a/src/main/java/org/sablecc/sablecc/parser/State.java b/src/main/java/org/sablecc/sablecc/parser/State.java
index 0673a4159937727a5bd3f1edf72580434afb0a16..cacfe290a45dae3fb1946f1b562f4fcd996ec4b1 100644
--- a/src/main/java/org/sablecc/sablecc/parser/State.java
+++ b/src/main/java/org/sablecc/sablecc/parser/State.java
@@ -7,9 +7,9 @@ import java.util.List;
 final class State
 {
     int state;
-    List<Object> nodes; // elements are of type Node or List<Node>
+    List<?> nodes; // elements are of type Node or List<Node>
 
-    State(int state, List<Object> nodes)
+    State(int state, List<?> nodes)
     {
         this.state = state;
         this.nodes = nodes;
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index e5cd53d8497334fc0007e806b445a7ea5cf89158..3dd2fc3dd641175b3d656a986e8061e7c53bc785 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -57,7 +57,6 @@ $
 Macro:ConstructorBodyHeader
 )
     {
-        // Constructor
 
 $
 
@@ -204,7 +203,6 @@ Macro:RemoveChildHeader
     @Override
     void removeChild(Node child)
     {
-        // Remove child
 
 $
 
@@ -238,7 +236,6 @@ Macro:ReplaceChildHeader
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        // Replace child
 
 $
 
diff --git a/src/main/resources/org/sablecc/sablecc/analyses.txt b/src/main/resources/org/sablecc/sablecc/analyses.txt
index 47b3d044d6006f8edbd4f73cb9ffc89daa4d06b8..0a2f1c36f1ffa5cef6ddfd81a58073b7d1451049 100644
--- a/src/main/resources/org/sablecc/sablecc/analyses.txt
+++ b/src/main/resources/org/sablecc/sablecc/analyses.txt
@@ -72,9 +72,7 @@ Macro:AnalysisAdapterTail
     }
 
     public void defaultCase(Node node)
-    {
-        // do nothing
-    }
+    {}
 }
 
 $
@@ -102,14 +100,10 @@ public class DepthFirstAdapter extends AnalysisAdapter
     }
 
     public void defaultIn(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     public void defaultOut(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     @Override
     public void caseStart(Start node)
@@ -146,14 +140,10 @@ public class ReversedDepthFirstAdapter extends AnalysisAdapter
     }
 
     public void defaultIn(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     public void defaultOut(Node node)
-    {
-        // Do nothing
-    }
+    {}
 
     @Override
     public void caseStart(Start node)
diff --git a/src/main/resources/org/sablecc/sablecc/lexer.txt b/src/main/resources/org/sablecc/sablecc/lexer.txt
index f129be40152c9ae2562978e2e5d07a882943e241..d441b05d32d84180ba5591471048cbeadb56dd5e 100644
--- a/src/main/resources/org/sablecc/sablecc/lexer.txt
+++ b/src/main/resources/org/sablecc/sablecc/lexer.txt
@@ -31,69 +31,49 @@ import java.io.DataInputStream;
 import java.io.InputStream;
 import java.io.IOException;
 import java.io.PushbackReader;
-import java.util.ArrayList;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Queue;
 
 import de.hhu.stups.sablecc.patch.IToken;
 
 import $0$node.*;
 
-@SuppressWarnings({"deprecation", "unused"}) // ITokenListContainer is deprecated, but the generated lexer still implements it for compatibility
-public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
+@SuppressWarnings("unused")
+public class Lexer
 {
     protected Token token;
     protected State state = State.$1$;
 
-    private PushbackReader in;
+    private final PushbackReader in;
     protected int line;
     protected int pos;
     private boolean cr;
     private boolean eof;
     private final StringBuilder text = new StringBuilder();
 
-    private List<IToken> tokenList;
+    @Deprecated
     private final Queue<IToken> nextList = new LinkedList<IToken>();
 
-    public Queue<IToken> getNextList() {
-        return nextList;
-    }
-
     /**
-     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
-     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     * @deprecated Use {@link #token} to get, modify, replace, and/or delete the current token.
+     *     Injecting new tokens into the token stream will not be supported in the future.
      */
     @Deprecated
-    @Override
-    public List<IToken> getTokenList() {
-        return tokenList;
+    public Queue<IToken> getNextList() {
+        return nextList;
     }
 
-    private void setToken(Token t) {
-        token = t;
-    }
+    protected void filter() throws LexerException, IOException
+    {}
 
     /**
-     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
-     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     * @deprecated Override {@link #filter()} instead.
      */
     @Deprecated
-    public void setTokenList(final List<IToken> list) {
-        tokenList = list;
-    }
-
-
-    protected void filter() throws LexerException, IOException
-    {
-        // Do nothing
-    }
-
     protected void filterWrap() throws LexerException, IOException
     {
         filter();
         if (token != null) {
-            getTokenList().add(token);
             nextList.add(token);
         }
     }
@@ -102,30 +82,31 @@ public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
     public Lexer(PushbackReader in)
     {
         this.in = in;
-        setTokenList(new ArrayList<IToken>());
     }
 
+    @SuppressWarnings("deprecation") // because of filterWrap and nextList
     public Token peek() throws LexerException, IOException
     {
         while(this.token == null)
         {
-            this.setToken(getToken());
+            token = getToken();
             filterWrap();
         }
 
         return (Token) nextList.peek();
     }
 
+    @SuppressWarnings("deprecation") // because of filterWrap and nextList
     public Token next() throws LexerException, IOException
     {
         while(this.token == null)
         {
-            this.setToken(getToken());
+            token = getToken();
             filterWrap();
         }
 
         Token result = (Token) nextList.poll();
-        this.setToken(null);
+        token = null;
         return result;
     }
 
@@ -241,7 +222,7 @@ $
 Macro:LexerVariableToken
                         case $0$:
                         {
-                            Token token = new$0$(
+                            Token token = new $1$(
                                 getText(accept_length),
                                 start_line + 1,
                                 start_pos + 1);
@@ -254,7 +235,7 @@ $
 Macro:LexerFixedToken
                         case $0$:
                         {
-                            Token token = new$0$(
+                            Token token = new $1$(
                                 start_line + 1,
                                 start_pos + 1);
                             pushBack(accept_length);
@@ -285,7 +266,7 @@ Macro:LexerTokenTail
 
 $
 
-Macro:LexerBody1
+Macro:LexerBody
                     }
                 }
                 else
@@ -306,21 +287,6 @@ Macro:LexerBody1
         }
     }
 
-
-$
-
-Macro:LexerNewVariableToken
-    Token new$0$(String text, int line, int pos) { return new $1$(text, line, pos); }
-
-$
-
-Macro:LexerNewFixedToken
-    Token new$0$(int line, int pos) { return new $1$(line, pos); }
-
-$
-
-Macro:LexerBody2
-
     private int getChar() throws IOException
     {
         if(this.eof)
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index 302d4d88448d65f0179d1bcf53bac5b21df2674d..c856e3649f72780ab682e501a261f25cc40e0fa2 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -14,33 +14,26 @@ import java.io.DataInputStream;
 import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
-import java.util.Map;
 
 import de.hhu.stups.sablecc.patch.IParser;
-import de.hhu.stups.sablecc.patch.IToken;
 import de.hhu.stups.sablecc.patch.PositionedNode;
+import de.hhu.stups.sablecc.patch.SourcePosition;
 
 import $0$lexer.Lexer;
 import $0$lexer.LexerException;
 import $0$node.*;
 
-@SuppressWarnings({"deprecation", "rawtypes", "unchecked", "unused"}) // getMapping() is deprecated, but the generated parser still populates it for compatibility
+@SuppressWarnings({"unchecked", "unused"})
 public class Parser implements IParser
 {
-    protected List<Object> nodeList;
-
     private final Lexer lexer;
     private final ListIterator<State> stack = new LinkedList<State>().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;
@@ -52,17 +45,7 @@ public class Parser implements IParser
         this.lexer = lexer;
     }
 
-    @Deprecated
-    private Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> mapping = new HashMap<>();
-    /**
-     * @deprecated All generated token classes store their own position info.
-     *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
-     */
-    @Deprecated
-    @Override
-    public Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> getMapping() { return this.mapping; }
-
-    private void checkResult(Object elementToCheck, List<Object> beginNodeList, List<Object> endNodeList) {
+    private void checkResult(Object elementToCheck, List<?> beginNodeList, List<?> endNodeList) {
         if (elementToCheck instanceof List<?>) {
             /*
              * special case: this is a list of nodes, for example an identifier
@@ -70,50 +53,45 @@ public class Parser implements IParser
              * added to it
              */
             final List<?> nodeList = (List<?>) elementToCheck;
-
-            if (nodeList.size() > 0) {
-                elementToCheck = nodeList.get(nodeList.size() - 1);
-            } else {
+            if (nodeList.isEmpty()) {
                 // no positions for empty lists...
                 return;
             }
+            elementToCheck = nodeList.get(nodeList.size() - 1);
         }
 
         final PositionedNode node = (PositionedNode) elementToCheck;
 
-        if (!this.getMapping().containsKey(node)) {
+        // Add node positions if they haven't been calculated yet.
+        // Tokens are skipped because they always have positions -
+        // this avoids creating unnecessary SourcePosition objects.
+        if (!(node instanceof Token) && node.getStartPos() == null) {
+            assert node.getEndPos() == null;
             PositionedNode beginNode = findBeginNode(beginNodeList);
-            final int begin;
             if (beginNode == null) {
                 /*
                  * 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.
+                 * of the whole parse unit. Then the start pos is the first char.
                  */
-                beginNode = (PositionedNode)this.lexer.getTokenList().get(0);
-                begin = 0;
+                node.setStartPos(new SourcePosition(1, 1));
             } else {
-                begin = findBeginPos(beginNode);
+                node.setStartPos(beginNode.getStartPos());
             }
 
             PositionedNode endNode = findEndNode(endNodeList);
-            int end = findEndPos(endNode);
-            if (end == -1) end = begin;
-            final de.hhu.stups.sablecc.patch.SourcecodeRange range = new de.hhu.stups.sablecc.patch.SourcecodeRange(begin, end);
-
-            this.getMapping().put(node, range);
-
-            node.setStartPos(beginNode.getStartPos());
             node.setEndPos(endNode.getEndPos());
+        } else {
+            assert node.getEndPos() != null;
         }
     }
 
-    private PositionedNode findBeginNode(final List<Object> list) {
+    private PositionedNode findBeginNode(final List<?> list) {
         Object first = list.get(0);
         if (first instanceof List<?>) {
             List<?> list2 = (List<?>) first;
 
-            if (list2.size() > 0) {
+            if (!list2.isEmpty()) {
                 return (PositionedNode)list2.get(0);
             } else {
                 return null;
@@ -123,15 +101,7 @@ public class Parser implements IParser
         return (PositionedNode)first;
     }
 
-    private int findBeginPos(final PositionedNode node) {
-        if (node instanceof IToken) {
-            return findIndex((IToken) node);
-        }
-
-        return this.getMapping().get(node).getBeginIndex();
-    }
-
-    private PositionedNode findEndNode(final List<Object> list) {
+    private PositionedNode findEndNode(final List<?> list) {
         Object last = list.get(list.size() - 1);
         if (last instanceof List<?>) {
             final List<?> list2 = (List<?>) last;
@@ -141,93 +111,42 @@ public class Parser implements IParser
         return (PositionedNode)last;
     }
 
-    private int findEndPos(final PositionedNode node) {
-        if (node instanceof IToken) {
-            return findIndex((IToken) node);
-        }
-
-        final de.hhu.stups.sablecc.patch.SourcecodeRange item = this.getMapping().get(node);
-        if (item == null) {
-            return -1;
-        }
-        return item.getEndIndex();
-    }
-
-    private int findIndex(final IToken token) {
-        final List<IToken> list = this.lexer.getTokenList();
-
-        for (int i = list.size() - 1; i >= 0; i--) {
-            if (list.get(i) == token) {
-                return i;
-            }
-        }
-
-        return -1;
-    }
-
-$
-
-Macro:ParserInliningPushHeader
-
-    private void push(int numstate, List<Object> listNode) throws ParserException, LexerException, IOException
-    {
-        this.nodeList = listNode;
-
-
-$
-
-Macro:ParserNoInliningPushHeader
-    protected void filter() throws ParserException, LexerException, IOException
-    {
-        // Empty body
-    }
-
-    private void push(int numstate, List<Object> listNode, boolean hidden) throws ParserException, LexerException, IOException
+    private void push(int numstate, List<?> listNode)
     {
-        this.nodeList = listNode;
-
-        if(!hidden)
-        {
-            filter();
-        }
-
-
-$
-
-Macro:ParserCommon
         if(!this.stack.hasNext())
         {
-            this.stack.add(new State(numstate, this.nodeList));
+            this.stack.add(new State(numstate, listNode));
             return;
         }
 
         State s = this.stack.next();
         s.state = numstate;
-        s.nodes = this.nodeList;
+        s.nodes = listNode;
     }
 
     private int goTo(int index)
     {
         int state = state();
+        int[][] table = gotoTable[index];
         int low = 1;
-        int high = gotoTable[index].length - 1;
-        int value = gotoTable[index][0][1];
+        int high = table.length - 1;
+        int value = table[0][1];
 
         while(low <= high)
         {
             int middle = (low + high) >>> 1;
 
-            if(state < gotoTable[index][middle][0])
+            if(state < table[middle][0])
             {
                 high = middle - 1;
             }
-            else if(state > gotoTable[index][middle][0])
+            else if(state > table[middle][0])
             {
                 low = middle + 1;
             }
             else
             {
-                value = gotoTable[index][middle][1];
+                value = table[middle][1];
                 break;
             }
         }
@@ -242,7 +161,7 @@ Macro:ParserCommon
         return s.state;
     }
 
-    private List<Object> pop()
+    private List<?> pop()
     {
         return this.stack.previous().nodes;
     }
@@ -257,83 +176,71 @@ Macro:ParserCommon
 
     public Start parse() throws ParserException, LexerException, IOException
     {
-        this.getMapping().clear();
-
-        push(0, null$0$);
+        push(0, null);
         while(true)
         {
-            while(index(this.lexer.peek()) == -1)
+            Token lastToken = this.lexer.peek();
+            int index = index(lastToken);
+            while(index == -1)
             {
                 // this is an ignored token
                 this.lexer.next();
+                lastToken = this.lexer.peek();
+                index = index(lastToken);
             }
 
-            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 state = state();
+            int[][] table = actionTable[state];
+            int action = table[0][1];
+            int destination = table[0][2];
 
             int low = 1;
-            int high = Parser.actionTable[state()].length - 1;
+            int high = table.length - 1;
 
             while(low <= high)
             {
                 int middle = (low + high) >>> 1;
 
-                if(index < Parser.actionTable[state()][middle][0])
+                if(index < table[middle][0])
                 {
                     high = middle - 1;
                 }
-                else if(index > Parser.actionTable[state()][middle][0])
+                else if(index > table[middle][0])
                 {
                     low = middle + 1;
                 }
                 else
                 {
-                    this.action[0] = Parser.actionTable[state()][middle][1];
-                    this.action[1] = Parser.actionTable[state()][middle][2];
+                    action = table[middle][1];
+                    destination = table[middle][2];
                     break;
                 }
             }
 
-            switch(this.action[0])
+            switch(action)
             {
                 case SHIFT:
                 {
-                    List<Object> list = new ArrayList<Object>();
-                    list.add(this.lexer.next());
-                    push(this.action[1], list$1$);
+                    List<?> list = Collections.singletonList(this.lexer.next());
+                    push(destination, list);
                 }
                 break;
                 case REDUCE:
-                    switch(this.action[1])
+                    switch(destination)
                     {
 
 $
 
-Macro:ParserInliningReduce
+Macro:ParserParseReduce
                         case $0$: /* reduce $2$ */
                         {
-                            List<Object> list = new$0$();
+                            List<?> list = new$0$();
                             push(goTo($1$), list);
                         }
                         break;
 
 $
 
-Macro:ParserNoInliningReduce
-                        case $0$: /* reduce $3$ */
-                        {
-                            List<Object> list = new$0$();
-                            push(goTo($1$), list, $2$);
-                        }
-                        break;
-
-$
-
 Macro:ParserParseTail
                     }
                     break;
@@ -345,9 +252,9 @@ Macro:ParserParseTail
                     return node;
                 }
                 case ERROR:
-                    throw new ParserException(this.last_token,
-                        "[" + this.last_line + "," + this.last_pos + "] " ,
-                        Parser.errorMessages[Parser.errors[this.action[1]]]);
+                    throw new ParserException(lastToken,
+                        "[" + lastToken.getLine() + "," + lastToken.getPos() + "] " ,
+                        Parser.errorMessages[Parser.errors[destination]]);
             }
         }
     }
@@ -357,101 +264,111 @@ $
 
 Macro:ParserNewHeader
 
-
-
-    private List<Object> new$0$() /* reduce $1$ */
+    private List<?> new$0$() /* reduce $1$ */
     {
-        List<Object> nodeList = new ArrayList<>();
-
 
 $
 
 Macro:ParserNewBodyDecl
-        List<Object> nodeArrayList$0$ = pop();
+        List<?> nodeArrayList$0$ = pop();
 
 $
 
-Macro:ParserNewBodyDeclNull
-        List<Object> nodeArrayList$0$ = null;
+Macro:ParserSimpleTerm
+        $0$ $1$ = ($0$)nodeArrayList$2$.get($3$);
 
 $
 
-Macro:ParserBraceOpening
-        {
-            // Block
-
+Macro:ParserNewBodyNew
+        $0$ $1$ = new $0$(
 $
 
-Macro:ParserBraceClosing
-        }
-
+Macro:ParserNewBodyParam
+$0$
 $
 
-Macro:ParserSimpleVariableDeclaration
-        $0$ $1$Node$2$;
-
-$
+Macro:ParserNewBodyNewTail
+);
 
-Macro:ParserListVariableDeclaration
-        LinkedList listNode$0$ = new LinkedList();
 
 $
 
-Macro:ParserSimpleTerm
-        $0$Node$1$ = ($2$)nodeArrayList$3$.get($4$);
+Macro:ParserTypedSingleElementList
+        $0$ $1$;
+        if($2$ != null) {
+            $1$ = Collections.singletonList($2$);
+        } else {
+            $1$ = Collections.emptyList();
+        }
 
 $
 
-Macro:ParserNewBodyNew
+Macro:ParserTypedListAssign
+        $0$ $1$ = $2$;
 
-        $0$Node$1$ = new $2$(
 $
 
-Macro:ParserNew&ListBodyParams
-$0$Node$1$
-$
+Macro:ParserTypedLinkedListInit
+        $0$ $1$ = new LinkedList<>();
 
-Macro:ParserNew&ListBodyParamsNull
-$0$
 $
 
-Macro:ParserNewBodyNewTail
-);
+Macro:ParserTypedLinkedListInitAddAll
+        $0$ $1$;
+        if ($2$ instanceof LinkedList<?>) {
+            $1$ = $2$;
+        } else {
+            $1$ = new LinkedList<>($2$);
+        }
 
 $
 
 Macro:ParserTypedLinkedListAdd
-        if($2$Node$3$ != null)
+        if($1$ != null)
         {
-            $0$Node$1$.add($2$Node$3$);
+            $0$.add($1$);
         }
 
 $
 
 Macro:ParserTypedLinkedListAddAll
-        if($2$Node$3$ != null)
-        {
-            if(!$0$Node$1$.isEmpty()){
-                $0$Node$1$.addAll($2$Node$3$);
-            }else{
-                $0$Node$1$ = $2$Node$3$;
-            }
+        if ($0$.isEmpty() && $1$ instanceof LinkedList<?>) {
+            $0$ = $1$;
+        } else {
+            $0$.addAll($1$);
         }
 
 $
 
-Macro:ParserNewBodyListAdd
-        nodeList.add($0$Node$1$);
+Macro:ParserNewCheck
+        checkResult($0$, nodeArrayList1, nodeArrayList$1$);
 
 $
 
-Macro:ParserNewCheck
-        checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList$0$);
+Macro:ParserNewTailEmpty
+        return Collections.emptyList();
+    }
+
+$
+
+Macro:ParserNewTailSingle
+        return Collections.singletonList($0$);
+    }
+
+$
+
+Macro:ParserNewTailMultiHead
+        return Arrays.asList(new Object[] {
+
+$
+
+Macro:ParserNewTailMultiElement
+            $0$,
 
 $
 
-Macro:ParserNewTail
-        return nodeList;
+Macro:ParserNewTailMultiTail
+        });
     }
 
 $
@@ -459,7 +376,7 @@ $
 Macro:ParserActionHeader
 
 
-    private static int[][][] actionTable;
+    private static final int[][][] actionTable;
 /*      {
 
 $
@@ -470,7 +387,7 @@ Macro:ParserActionTail
 $
 
 Macro:ParserGotoHeader
-    private static int[][][] gotoTable;
+    private static final int[][][] gotoTable;
 /*      {
 
 $
@@ -481,7 +398,7 @@ Macro:ParserGotoTail
 $
 
 Macro:ParserErrorsHeader
-    private static String[] errorMessages;
+    private static final String[] errorMessages;
 /*      {
 
 $
@@ -492,7 +409,7 @@ Macro:ParserErrorsTail
 $
 
 Macro:ParserErrorIndexHeader
-    private static int[] errors;
+    private static final int[] errors;
 /*      {
 
 $
@@ -518,16 +435,16 @@ Macro:ParserTail
 
             // read actionTable
             int length = s.readInt();
-            Parser.actionTable = new int[length][][];
-            for(int i = 0; i < Parser.actionTable.length; i++)
+            actionTable = new int[length][][];
+            for(int i = 0; i < actionTable.length; i++)
             {
                 length = s.readInt();
-                Parser.actionTable[i] = new int[length][3];
-                for(int j = 0; j < Parser.actionTable[i].length; j++)
+                actionTable[i] = new int[length][3];
+                for(int j = 0; j < actionTable[i].length; j++)
                 {
                     for(int k = 0; k < 3; k++)
                     {
-                        Parser.actionTable[i][j][k] = s.readInt();
+                        actionTable[i][j][k] = s.readInt();
                     }
                 }
             }
@@ -666,9 +583,9 @@ import java.util.List;
 final class State
 {
     int state;
-    List<Object> nodes; // elements are of type Node or List<Node>
+    List<?> nodes; // elements are of type Node or List<Node>
 
-    State(int state, List<Object> nodes)
+    State(int state, List<?> nodes)
     {
         this.state = state;
         this.nodes = nodes;
diff --git a/src/main/resources/org/sablecc/sablecc/utils.txt b/src/main/resources/org/sablecc/sablecc/utils.txt
index 92ce0860324b63443c648c2b78dfd8457799d02a..b66f88376cef6ea262174bdc08c20777d2427173 100644
--- a/src/main/resources/org/sablecc/sablecc/utils.txt
+++ b/src/main/resources/org/sablecc/sablecc/utils.txt
@@ -18,9 +18,7 @@ public final class Start extends Node
     private EOF _eof_;
 
     public Start()
-    {
-        // Empty body
-    }
+    {}
 
     public Start(
         $1$ _$2$_,
@@ -420,9 +418,7 @@ Macro:Switch
 package $0$node;
 
 public interface Switch
-{
-    // Empty body
-}
+{}
 
 $