diff --git a/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java b/src/main/java/org/sablecc/sablecc/AltTransformAdapter.java
index 51fd2d0d44d193bc4542205410e50b31f8fa6770..5328e57041089919ea3e74f34b3240b44cb7413e 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,9 @@ public class AltTransformAdapter extends DepthFirstAdapter
       }
 
       node.replaceBy(asimpleTerm);
-      simpleTermTransform.put(asimpleTerm, "L"+ResolveIds.name(isElementIsAlist.get(currentNewAltName+name)) );
+      String key = altIds.ids.elemTypes.get(elemNode) + "." + simpleTermTail.getText();
+      String elementType = transformIds.getProdTransformIds().prodTransformElemTypesString.get(key);
+      simpleTermTransform.put(asimpleTerm, "L" + elementType);
 
       //Terms are added here only if they were implicitely transformed
       listSimpleTermTransform.add( asimpleTerm );
@@ -87,7 +94,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 +104,7 @@ public class AltTransformAdapter extends DepthFirstAdapter
       }
       else
       {
-        simpleTermTail = new TId(isElementIsAlist.get(currentNewAltName+name));
+        simpleTermTail = elemNode.getId().clone();
       }
 
       TId tid;
@@ -111,7 +119,9 @@ public class AltTransformAdapter extends DepthFirstAdapter
       }
 
       node.replaceBy(asimpleListTerm);
-      simpleTermTransform.put(asimpleListTerm, "L"+ResolveIds.name(isElementIsAlist.get(currentNewAltName+name)));
+      String key = altIds.ids.elemTypes.get(elemNode) + "." + simpleTermTail.getText();
+      String elementType = transformIds.getProdTransformIds().prodTransformElemTypesString.get(key);
+      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/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 3b12dda2893d76df184160d590513d839b55ccf6..8c16b431149469f142c3ca2ef8150266c4f42cf6 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -82,6 +82,10 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     {
       return "null";
     }
+    else if("Lnull".equals(typeName))
+    {
+      return "Collections.EMPTY_LIST"; // Once we require Java 8, this can be replaced with Collections.emptyList()
+    }
     else if(typeName.startsWith("L"))
     {
       return "listNode" + position;
@@ -105,7 +109,15 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
     }
     else if(typeName.startsWith("L"))
     {
-      return "LinkedList";
+      String elementTypeName = typeName.substring(1);
+      if("null".equals(elementTypeName))
+      {
+        throw new IllegalArgumentException("Empty list values have no variable type");
+      }
+      else
+      {
+        return "LinkedList<" + elementTypeName + ">";
+      }
     }
     else
     {
@@ -116,17 +128,17 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   private void generateVariableDeclaration(Node term) throws IOException {
     String typeName = lookupInternalTypeName(term);
 
-    if(typeName.startsWith("L"))
+    if("null".equals(typeName) || "Lnull".equals(typeName))
     {
-      macros.apply(file, "ParserListVariableDeclaration", new String[] {getVariableName(term)});
+      // No intermediate variable needed for null or empty list arguments
     }
-    else if(typeName.equals("null"))
+    else if(typeName.startsWith("L"))
     {
-      // No intermediate variable needed for null arguments
+      macros.apply(file, "ParserListVariableDeclaration", new String[] {variableTypeFromInternalType(typeName), getVariableName(term)});
     }
     else
     {
-      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {typeName, getVariableName(term)});
+      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {variableTypeFromInternalType(typeName), getVariableName(term)});
     }
   }
 
@@ -219,10 +231,14 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         }
       }
 
-      if(type_name.equals("null"))
+      if("null".equals(type_name))
       {
         throw new RuntimeException("Simple term has null type - this should never happen");
       }
+      else if("Lnull".equals(type_name))
+      {
+        throw new RuntimeException("Simple term has list type with no element type - this should never happen");
+      }
 
       macros.apply(file, "ParserSimpleTerm", new String[]
                    {
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/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index 7e8878d6eaf31cc2769eceb9870f37b62c60bbed..b9d6d47db101408b5378be9338863c07288be29c 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -7,6 +7,7 @@ import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
@@ -19,7 +20,7 @@ import org.sablecc.sablecc.lexer.Lexer;
 import org.sablecc.sablecc.lexer.LexerException;
 import org.sablecc.sablecc.node.*;
 
-@SuppressWarnings({"rawtypes", "unchecked", "unused"})
+@SuppressWarnings({"unchecked", "unused"})
 public class Parser implements IParser
 {
     protected List<Object> nodeList;
@@ -1863,12 +1864,11 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         {
             // Block
         }
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         return nodeList;
@@ -1884,11 +1884,11 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -1916,14 +1916,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         {
             // Block
         }
         phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -1941,12 +1940,12 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -1975,14 +1974,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         {
             // Block
         }
         pstatesNode4 = (PStates)nodeArrayList1.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -2000,12 +1998,12 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2035,7 +2033,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         {
@@ -2044,7 +2041,7 @@ public class Parser implements IParser
         phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
         pstatesNode4 = (PStates)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -2063,13 +2060,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2099,14 +2096,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         {
             // Block
         }
         ptokensNode5 = (PTokens)nodeArrayList1.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -2124,12 +2120,12 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2159,7 +2155,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         {
@@ -2168,7 +2163,7 @@ public class Parser implements IParser
         phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -2187,13 +2182,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2224,7 +2219,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         {
@@ -2233,7 +2227,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList1.get(0);
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -2252,13 +2246,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2290,7 +2284,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -2301,7 +2294,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList2.get(0);
         ptokensNode5 = (PTokens)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -2321,14 +2314,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2359,14 +2352,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PIgnTokens pigntokensNode6;
         {
             // Block
         }
         pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -2384,12 +2376,12 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2419,7 +2411,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PIgnTokens pigntokensNode6;
         {
@@ -2428,7 +2419,7 @@ public class Parser implements IParser
         phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -2447,13 +2438,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2484,7 +2475,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
         {
@@ -2493,7 +2483,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList1.get(0);
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -2512,13 +2502,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2550,7 +2540,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
@@ -2561,7 +2550,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList2.get(0);
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -2581,14 +2570,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2620,7 +2609,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
         {
@@ -2629,7 +2617,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList1.get(0);
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -2648,13 +2636,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2686,7 +2674,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -2697,7 +2684,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -2717,14 +2704,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2757,7 +2744,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -2768,7 +2754,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -2788,14 +2774,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2829,7 +2815,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -2842,7 +2827,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList3.get(0);
         pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -2863,15 +2848,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2903,14 +2888,13 @@ public class Parser implements IParser
         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);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -2928,12 +2912,12 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -2963,7 +2947,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PProductions pproductionsNode7;
         {
@@ -2972,7 +2955,7 @@ public class Parser implements IParser
         phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -2991,13 +2974,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3028,7 +3011,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PProductions pproductionsNode7;
         {
@@ -3037,7 +3019,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList1.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -3056,13 +3038,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3094,7 +3076,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PProductions pproductionsNode7;
@@ -3105,7 +3086,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList2.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -3125,14 +3106,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3164,7 +3145,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         PProductions pproductionsNode7;
         {
@@ -3173,7 +3153,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList1.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -3192,13 +3172,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3230,7 +3210,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         PProductions pproductionsNode7;
@@ -3241,7 +3220,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -3261,14 +3240,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3301,7 +3280,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         PProductions pproductionsNode7;
@@ -3312,7 +3290,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -3332,14 +3310,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3373,7 +3351,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -3386,7 +3363,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList3.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -3407,15 +3384,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3448,7 +3425,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
         {
@@ -3457,7 +3433,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -3476,13 +3452,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3514,7 +3490,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
@@ -3525,7 +3500,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -3545,14 +3520,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3585,7 +3560,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
@@ -3596,7 +3570,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -3616,14 +3590,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3657,7 +3631,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
@@ -3670,7 +3643,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -3691,15 +3664,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3733,7 +3706,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
@@ -3744,7 +3716,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -3764,14 +3736,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3805,7 +3777,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -3818,7 +3789,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -3839,15 +3810,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3882,7 +3853,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -3895,7 +3865,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -3916,15 +3886,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -3960,7 +3930,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -3975,7 +3944,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
         pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, null);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
@@ -3997,7 +3966,7 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
@@ -4005,8 +3974,8 @@ public class Parser implements IParser
         PProductions pproductionsNode8;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4039,14 +4008,13 @@ public class Parser implements IParser
         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);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -4064,12 +4032,12 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4099,7 +4067,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PAst pastNode8;
         {
@@ -4108,7 +4075,7 @@ public class Parser implements IParser
         phelpersNode3 = (PHelpers)nodeArrayList1.get(0);
         pastNode8 = (PAst)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -4127,13 +4094,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4164,7 +4131,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PAst pastNode8;
         {
@@ -4173,7 +4139,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList1.get(0);
         pastNode8 = (PAst)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -4192,13 +4158,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4230,7 +4196,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PAst pastNode8;
@@ -4241,7 +4206,7 @@ public class Parser implements IParser
         pstatesNode4 = (PStates)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -4261,14 +4226,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4300,7 +4265,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         PAst pastNode8;
         {
@@ -4309,7 +4273,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList1.get(0);
         pastNode8 = (PAst)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -4328,13 +4292,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4366,7 +4330,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         PAst pastNode8;
@@ -4377,7 +4340,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -4397,14 +4360,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4437,7 +4400,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         PAst pastNode8;
@@ -4448,7 +4410,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -4468,14 +4430,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4509,7 +4471,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -4522,7 +4483,7 @@ public class Parser implements IParser
         ptokensNode5 = (PTokens)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -4543,15 +4504,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4584,7 +4545,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PIgnTokens pigntokensNode6;
         PAst pastNode8;
         {
@@ -4593,7 +4553,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList1.get(0);
         pastNode8 = (PAst)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -4612,13 +4572,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4650,7 +4610,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PIgnTokens pigntokensNode6;
         PAst pastNode8;
@@ -4661,7 +4620,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -4681,14 +4640,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4721,7 +4680,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
         PAst pastNode8;
@@ -4732,7 +4690,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -4752,14 +4710,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4793,7 +4751,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
@@ -4806,7 +4763,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -4827,15 +4784,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4869,7 +4826,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
         PAst pastNode8;
@@ -4880,7 +4836,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -4900,14 +4856,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -4941,7 +4897,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -4954,7 +4909,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -4975,15 +4930,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5018,7 +4973,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -5031,7 +4985,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -5052,15 +5006,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5096,7 +5050,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -5111,7 +5064,7 @@ public class Parser implements IParser
         pigntokensNode6 = (PIgnTokens)nodeArrayList4.get(0);
         pastNode8 = (PAst)nodeArrayList5.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, null, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
@@ -5133,7 +5086,7 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
@@ -5141,8 +5094,8 @@ public class Parser implements IParser
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5176,7 +5129,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PProductions pproductionsNode7;
         PAst pastNode8;
         {
@@ -5185,7 +5137,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList1.get(0);
         pastNode8 = (PAst)nodeArrayList2.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -5204,13 +5156,13 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5242,7 +5194,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PProductions pproductionsNode7;
         PAst pastNode8;
@@ -5253,7 +5204,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -5273,14 +5224,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5313,7 +5264,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PProductions pproductionsNode7;
         PAst pastNode8;
@@ -5324,7 +5274,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -5344,14 +5294,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5385,7 +5335,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PProductions pproductionsNode7;
@@ -5398,7 +5347,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -5419,15 +5368,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5461,7 +5410,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         PProductions pproductionsNode7;
         PAst pastNode8;
@@ -5472,7 +5420,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -5492,14 +5440,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5533,7 +5481,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         PProductions pproductionsNode7;
@@ -5546,7 +5493,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -5567,15 +5514,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5610,7 +5557,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         PProductions pproductionsNode7;
@@ -5623,7 +5569,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -5644,15 +5590,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5688,7 +5634,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -5703,7 +5648,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
         pastNode8 = (PAst)nodeArrayList5.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, null, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
@@ -5725,7 +5670,7 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
@@ -5733,8 +5678,8 @@ public class Parser implements IParser
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5769,7 +5714,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
         PAst pastNode8;
@@ -5780,7 +5724,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList2.get(0);
         pastNode8 = (PAst)nodeArrayList3.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -5800,14 +5744,14 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5841,7 +5785,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
@@ -5854,7 +5797,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, null, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -5875,15 +5818,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5918,7 +5861,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
@@ -5931,7 +5873,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -5952,15 +5894,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -5996,7 +5938,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PIgnTokens pigntokensNode6;
@@ -6011,7 +5952,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
         pastNode8 = (PAst)nodeArrayList5.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, null, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
@@ -6033,7 +5974,7 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
@@ -6041,8 +5982,8 @@ public class Parser implements IParser
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6078,7 +6019,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
         PProductions pproductionsNode7;
@@ -6091,7 +6031,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList3.get(0);
         pastNode8 = (PAst)nodeArrayList4.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -6112,15 +6052,15 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6156,7 +6096,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -6171,7 +6110,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
         pastNode8 = (PAst)nodeArrayList5.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, null, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
@@ -6193,7 +6132,7 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
@@ -6201,8 +6140,8 @@ public class Parser implements IParser
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6239,7 +6178,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PStates pstatesNode4;
         PTokens ptokensNode5;
         PIgnTokens pigntokensNode6;
@@ -6254,7 +6192,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList4.get(0);
         pastNode8 = (PAst)nodeArrayList5.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, null, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList5);
@@ -6276,7 +6214,7 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
@@ -6284,8 +6222,8 @@ public class Parser implements IParser
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6323,7 +6261,6 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         PHelpers phelpersNode3;
         PStates pstatesNode4;
         PTokens ptokensNode5;
@@ -6340,7 +6277,7 @@ public class Parser implements IParser
         pproductionsNode7 = (PProductions)nodeArrayList5.get(0);
         pastNode8 = (PAst)nodeArrayList6.get(0);
 
-        pgrammarNode1 = new AGrammar(listNode2, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
+        pgrammarNode1 = new AGrammar(Collections.EMPTY_LIST, phelpersNode3, pstatesNode4, ptokensNode5, pigntokensNode6, pproductionsNode7, pastNode8);
         }
         nodeList.add(pgrammarNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList6);
@@ -6363,7 +6300,7 @@ public class Parser implements IParser
         PGrammar pgrammarNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
@@ -6372,8 +6309,8 @@ public class Parser implements IParser
         PAst pastNode9;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6405,11 +6342,11 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
-        listNode1 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<TPkgId> listNode1 = new LinkedList<>();
+        listNode1 = (LinkedList<TPkgId>)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
             if(!listNode2.isEmpty()){
@@ -6432,7 +6369,7 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
         {
             // Block
         TPkgId tpkgidNode1;
@@ -6456,13 +6393,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList3 = pop();
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         {
             // Block
         TPkgId tpkgidNode1;
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
         tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        listNode2 = (LinkedList<TPkgId>)nodeArrayList2.get(0);
         if(tpkgidNode1 != null)
         {
             listNode3.add(tpkgidNode1);
@@ -6507,11 +6444,11 @@ public class Parser implements IParser
         PHelpers phelpersNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PHelperDef> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<PHelperDef> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<PHelperDef>)nodeArrayList2.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6566,11 +6503,11 @@ public class Parser implements IParser
         PStates pstatesNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TId> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<TId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TId>)nodeArrayList2.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6595,7 +6532,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<TId> listNode2 = new LinkedList<>();
         {
             // Block
         TId tidNode1;
@@ -6618,13 +6555,13 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TId> listNode3 = new LinkedList<>();
         {
             // Block
         TId tidNode1;
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<TId> listNode2 = new LinkedList<>();
         tidNode1 = (TId)nodeArrayList1.get(0);
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        listNode2 = (LinkedList<TId>)nodeArrayList2.get(0);
         if(tidNode1 != null)
         {
             listNode3.add(tidNode1);
@@ -6669,11 +6606,11 @@ public class Parser implements IParser
         PTokens ptokensNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PTokenDef> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<PTokenDef> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<PTokenDef>)nodeArrayList2.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -6820,13 +6757,12 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
         tidNode2 = (TId)nodeArrayList2.get(0);
         {
             // Block
         }
 
-        pstatelistNode1 = new AStateList(tidNode2, null, listNode4);
+        pstatelistNode1 = new AStateList(tidNode2, null, Collections.EMPTY_LIST);
         }
         nodeList.add(pstatelistNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -6848,14 +6784,13 @@ public class Parser implements IParser
             // 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);
+        pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, Collections.EMPTY_LIST);
         }
         nodeList.add(pstatelistNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -6876,12 +6811,12 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode5 = new LinkedList();
+        LinkedList<PStateListTail> listNode5 = new LinkedList<>();
         tidNode2 = (TId)nodeArrayList2.get(0);
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
-        listNode4 = (LinkedList)nodeArrayList3.get(0);
+        LinkedList<PStateListTail> listNode4 = new LinkedList<>();
+        listNode4 = (LinkedList<PStateListTail>)nodeArrayList3.get(0);
         if(listNode4 != null)
         {
             if(!listNode5.isEmpty()){
@@ -6915,13 +6850,13 @@ public class Parser implements IParser
             // Block
         TId tidNode2;
         PTransition ptransitionNode3;
-        LinkedList listNode5 = new LinkedList();
+        LinkedList<PStateListTail> listNode5 = new LinkedList<>();
         tidNode2 = (TId)nodeArrayList2.get(0);
         ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
-        listNode4 = (LinkedList)nodeArrayList4.get(0);
+        LinkedList<PStateListTail> listNode4 = new LinkedList<>();
+        listNode4 = (LinkedList<PStateListTail>)nodeArrayList4.get(0);
         if(listNode4 != null)
         {
             if(!listNode5.isEmpty()){
@@ -7017,12 +6952,11 @@ public class Parser implements IParser
         PIgnTokens pigntokensNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         {
             // Block
         }
 
-        pigntokensNode1 = new AIgnTokens(listNode2);
+        pigntokensNode1 = new AIgnTokens(Collections.EMPTY_LIST);
         }
         nodeList.add(pigntokensNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -7042,11 +6976,11 @@ public class Parser implements IParser
         PIgnTokens pigntokensNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TId> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList3.get(0);
+        LinkedList<TId> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<TId>)nodeArrayList3.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -7092,7 +7026,7 @@ public class Parser implements IParser
         PRegExp pregexpNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PConcat> listNode3 = new LinkedList<>();
         {
             // Block
         PConcat pconcatNode2;
@@ -7121,13 +7055,13 @@ public class Parser implements IParser
         PRegExp pregexpNode1;
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PConcat> listNode4 = new LinkedList<>();
         {
             // Block
         PConcat pconcatNode2;
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PConcat> listNode3 = new LinkedList<>();
         pconcatNode2 = (PConcat)nodeArrayList1.get(0);
-        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        listNode3 = (LinkedList<PConcat>)nodeArrayList2.get(0);
         if(pconcatNode2 != null)
         {
             listNode4.add(pconcatNode2);
@@ -7173,12 +7107,11 @@ public class Parser implements IParser
         PConcat pconcatNode1;
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
         {
             // Block
         }
 
-        pconcatNode1 = new AConcat(listNode2);
+        pconcatNode1 = new AConcat(Collections.EMPTY_LIST);
         }
         nodeList.add(pconcatNode1);
         return nodeList;
@@ -7194,11 +7127,11 @@ public class Parser implements IParser
         PConcat pconcatNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PUnExp> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<PUnExp> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<PUnExp>)nodeArrayList1.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -7582,11 +7515,11 @@ public class Parser implements IParser
         PProductions pproductionsNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PProd> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<PProd> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<PProd>)nodeArrayList2.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -7618,16 +7551,15 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
-        LinkedList listNode6 = new LinkedList();
+        LinkedList<PAlt> listNode6 = new LinkedList<>();
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
             // Block
         }
         {
             // Block
-        LinkedList listNode5 = new LinkedList();
-        listNode5 = (LinkedList)nodeArrayList3.get(0);
+        LinkedList<PAlt> listNode5 = new LinkedList<>();
+        listNode5 = (LinkedList<PAlt>)nodeArrayList3.get(0);
         if(listNode5 != null)
         {
             if(!listNode6.isEmpty()){
@@ -7638,7 +7570,7 @@ public class Parser implements IParser
         }
         }
 
-        pprodNode1 = new AProd(tidNode2, null, listNode4, listNode6);
+        pprodNode1 = new AProd(tidNode2, null, Collections.EMPTY_LIST, listNode6);
         }
         nodeList.add(pprodNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -7661,14 +7593,14 @@ public class Parser implements IParser
             // Block
         TId tidNode2;
         TArrow tarrowNode3;
-        LinkedList listNode5 = new LinkedList();
-        LinkedList listNode7 = new LinkedList();
+        LinkedList<PElem> listNode5 = new LinkedList<>();
+        LinkedList<PAlt> listNode7 = new LinkedList<>();
         tidNode2 = (TId)nodeArrayList1.get(0);
         tarrowNode3 = (TArrow)nodeArrayList2.get(0);
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
-        listNode4 = (LinkedList)nodeArrayList2.get(1);
+        LinkedList<PElem> listNode4 = new LinkedList<>();
+        listNode4 = (LinkedList<PElem>)nodeArrayList2.get(1);
         if(listNode4 != null)
         {
             if(!listNode5.isEmpty()){
@@ -7680,8 +7612,8 @@ public class Parser implements IParser
         }
         {
             // Block
-        LinkedList listNode6 = new LinkedList();
-        listNode6 = (LinkedList)nodeArrayList4.get(0);
+        LinkedList<PAlt> listNode6 = new LinkedList<>();
+        listNode6 = (LinkedList<PAlt>)nodeArrayList4.get(0);
         if(listNode6 != null)
         {
             if(!listNode7.isEmpty()){
@@ -7709,13 +7641,12 @@ public class Parser implements IParser
         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);
+        nodeList.add(Collections.EMPTY_LIST);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
         return nodeList;
     }
@@ -7731,12 +7662,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
         TArrow tarrowNode1;
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PElem> listNode3 = new LinkedList<>();
         tarrowNode1 = (TArrow)nodeArrayList2.get(0);
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList3.get(0);
+        LinkedList<PElem> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<PElem>)nodeArrayList3.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -7759,7 +7690,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PAlt> listNode2 = new LinkedList<>();
         {
             // Block
         PAlt paltNode1;
@@ -7782,13 +7713,13 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PAlt> listNode3 = new LinkedList<>();
         {
             // Block
         PAlt paltNode1;
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PAlt> listNode2 = new LinkedList<>();
         paltNode1 = (PAlt)nodeArrayList1.get(0);
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        listNode2 = (LinkedList<PAlt>)nodeArrayList2.get(0);
         if(paltNode1 != null)
         {
             listNode3.add(paltNode1);
@@ -7831,12 +7762,11 @@ public class Parser implements IParser
         PAlt paltNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
         {
             // Block
         }
 
-        paltNode1 = new AAlt(null, listNode3, null);
+        paltNode1 = new AAlt(null, Collections.EMPTY_LIST, null);
         }
         nodeList.add(paltNode1);
         return nodeList;
@@ -7853,13 +7783,12 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode3 = new LinkedList();
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
             // Block
         }
 
-        paltNode1 = new AAlt(tidNode2, listNode3, null);
+        paltNode1 = new AAlt(tidNode2, Collections.EMPTY_LIST, null);
         }
         nodeList.add(paltNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -7876,11 +7805,11 @@ public class Parser implements IParser
         PAlt paltNode1;
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PElem> listNode4 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<PElem> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PElem>)nodeArrayList1.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -7910,12 +7839,12 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PElem> listNode4 = new LinkedList<>();
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<PElem> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PElem>)nodeArrayList2.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -7943,14 +7872,13 @@ public class Parser implements IParser
         PAlt paltNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
         PAltTransform palttransformNode4;
         {
             // Block
         }
         palttransformNode4 = (PAltTransform)nodeArrayList1.get(0);
 
-        paltNode1 = new AAlt(null, listNode3, palttransformNode4);
+        paltNode1 = new AAlt(null, Collections.EMPTY_LIST, palttransformNode4);
         }
         nodeList.add(paltNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -7969,7 +7897,6 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode3 = new LinkedList();
         PAltTransform palttransformNode4;
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
@@ -7977,7 +7904,7 @@ public class Parser implements IParser
         }
         palttransformNode4 = (PAltTransform)nodeArrayList2.get(0);
 
-        paltNode1 = new AAlt(tidNode2, listNode3, palttransformNode4);
+        paltNode1 = new AAlt(tidNode2, Collections.EMPTY_LIST, palttransformNode4);
         }
         nodeList.add(paltNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -7995,12 +7922,12 @@ public class Parser implements IParser
         PAlt paltNode1;
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PElem> listNode4 = new LinkedList<>();
         PAltTransform palttransformNode5;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<PElem> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PElem>)nodeArrayList1.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -8032,13 +7959,13 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PElem> listNode4 = new LinkedList<>();
         PAltTransform palttransformNode5;
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<PElem> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PElem>)nodeArrayList2.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -8070,7 +7997,6 @@ public class Parser implements IParser
         {
             // Block
         TLBrace tlbraceNode2;
-        LinkedList listNode3 = new LinkedList();
         TRBrace trbraceNode4;
         tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
         {
@@ -8078,7 +8004,7 @@ public class Parser implements IParser
         }
         trbraceNode4 = (TRBrace)nodeArrayList3.get(0);
 
-        palttransformNode1 = new AAltTransform(tlbraceNode2, listNode3, trbraceNode4);
+        palttransformNode1 = new AAltTransform(tlbraceNode2, Collections.EMPTY_LIST, trbraceNode4);
         }
         nodeList.add(palttransformNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList3);
@@ -8099,13 +8025,13 @@ public class Parser implements IParser
         {
             // Block
         TLBrace tlbraceNode2;
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PTerm> listNode4 = new LinkedList<>();
         TRBrace trbraceNode5;
         tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList3.get(0);
+        LinkedList<PTerm> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PTerm>)nodeArrayList3.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -8139,14 +8065,13 @@ public class Parser implements IParser
             // 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);
+        ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, Collections.EMPTY_LIST);
         }
         nodeList.add(ptermNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -8169,13 +8094,13 @@ public class Parser implements IParser
             // Block
         PProdName pprodnameNode2;
         TLPar tlparNode3;
-        LinkedList listNode5 = new LinkedList();
+        LinkedList<PTerm> listNode5 = new LinkedList<>();
         pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
         tlparNode3 = (TLPar)nodeArrayList3.get(0);
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
-        listNode4 = (LinkedList)nodeArrayList4.get(0);
+        LinkedList<PTerm> listNode4 = new LinkedList<>();
+        listNode4 = (LinkedList<PTerm>)nodeArrayList4.get(0);
         if(listNode4 != null)
         {
             if(!listNode5.isEmpty()){
@@ -8205,13 +8130,12 @@ public class Parser implements IParser
         {
             // Block
         TLBkt tlbktNode2;
-        LinkedList listNode3 = new LinkedList();
         tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
         {
             // Block
         }
 
-        ptermNode1 = new AListTerm(tlbktNode2, listNode3);
+        ptermNode1 = new AListTerm(tlbktNode2, Collections.EMPTY_LIST);
         }
         nodeList.add(ptermNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -8231,12 +8155,12 @@ public class Parser implements IParser
         {
             // Block
         TLBkt tlbktNode2;
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PListTerm> listNode4 = new LinkedList<>();
         tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<PListTerm> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PListTerm>)nodeArrayList2.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -8371,7 +8295,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PListTerm> listNode2 = new LinkedList<>();
         {
             // Block
         PListTerm plisttermNode1;
@@ -8394,13 +8318,13 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PListTerm> listNode3 = new LinkedList<>();
         {
             // Block
         PListTerm plisttermNode1;
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PListTerm> listNode2 = new LinkedList<>();
         plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        listNode2 = (LinkedList<PListTerm>)nodeArrayList2.get(0);
         if(plisttermNode1 != null)
         {
             listNode3.add(plisttermNode1);
@@ -8434,14 +8358,13 @@ public class Parser implements IParser
             // Block
         PProdName pprodnameNode2;
         TLPar tlparNode3;
-        LinkedList listNode4 = new LinkedList();
         pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
         tlparNode3 = (TLPar)nodeArrayList3.get(0);
         {
             // Block
         }
 
-        plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode4);
+        plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, Collections.EMPTY_LIST);
         }
         nodeList.add(plisttermNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList4);
@@ -8464,13 +8387,13 @@ public class Parser implements IParser
             // Block
         PProdName pprodnameNode2;
         TLPar tlparNode3;
-        LinkedList listNode5 = new LinkedList();
+        LinkedList<PTerm> listNode5 = new LinkedList<>();
         pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
         tlparNode3 = (TLPar)nodeArrayList3.get(0);
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
-        listNode4 = (LinkedList)nodeArrayList4.get(0);
+        LinkedList<PTerm> listNode4 = new LinkedList<>();
+        listNode4 = (LinkedList<PTerm>)nodeArrayList4.get(0);
         if(listNode4 != null)
         {
             if(!listNode5.isEmpty()){
@@ -8675,7 +8598,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PTerm> listNode2 = new LinkedList<>();
         {
             // Block
         PTerm ptermNode1;
@@ -8698,13 +8621,13 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PTerm> listNode3 = new LinkedList<>();
         {
             // Block
         PTerm ptermNode1;
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PTerm> listNode2 = new LinkedList<>();
         ptermNode1 = (PTerm)nodeArrayList1.get(0);
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        listNode2 = (LinkedList<PTerm>)nodeArrayList2.get(0);
         if(ptermNode1 != null)
         {
             listNode3.add(ptermNode1);
@@ -9018,11 +8941,11 @@ public class Parser implements IParser
         PAst pastNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PAstProd> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode2 = new LinkedList();
-        listNode2 = (LinkedList)nodeArrayList4.get(0);
+        LinkedList<PAstProd> listNode2 = new LinkedList<>();
+        listNode2 = (LinkedList<PAstProd>)nodeArrayList4.get(0);
         if(listNode2 != null)
         {
             if(!listNode3.isEmpty()){
@@ -9054,12 +8977,12 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PAstAlt> listNode4 = new LinkedList<>();
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList3.get(0);
+        LinkedList<PAstAlt> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PAstAlt>)nodeArrayList3.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -9084,7 +9007,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PAstAlt> listNode2 = new LinkedList<>();
         {
             // Block
         PAstAlt pastaltNode1;
@@ -9107,13 +9030,13 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PAstAlt> listNode3 = new LinkedList<>();
         {
             // Block
         PAstAlt pastaltNode1;
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PAstAlt> listNode2 = new LinkedList<>();
         pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-        listNode2 = (LinkedList)nodeArrayList2.get(0);
+        listNode2 = (LinkedList<PAstAlt>)nodeArrayList2.get(0);
         if(pastaltNode1 != null)
         {
             listNode3.add(pastaltNode1);
@@ -9156,12 +9079,11 @@ public class Parser implements IParser
         PAstAlt pastaltNode1;
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
         {
             // Block
         }
 
-        pastaltNode1 = new AAstAlt(null, listNode3);
+        pastaltNode1 = new AAstAlt(null, Collections.EMPTY_LIST);
         }
         nodeList.add(pastaltNode1);
         return nodeList;
@@ -9178,13 +9100,12 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode3 = new LinkedList();
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
             // Block
         }
 
-        pastaltNode1 = new AAstAlt(tidNode2, listNode3);
+        pastaltNode1 = new AAstAlt(tidNode2, Collections.EMPTY_LIST);
         }
         nodeList.add(pastaltNode1);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList1);
@@ -9201,11 +9122,11 @@ public class Parser implements IParser
         PAstAlt pastaltNode1;
         {
             // Block
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PElem> listNode4 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList1.get(0);
+        LinkedList<PElem> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PElem>)nodeArrayList1.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -9235,12 +9156,12 @@ public class Parser implements IParser
         {
             // Block
         TId tidNode2;
-        LinkedList listNode4 = new LinkedList();
+        LinkedList<PElem> listNode4 = new LinkedList<>();
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
             // Block
-        LinkedList listNode3 = new LinkedList();
-        listNode3 = (LinkedList)nodeArrayList2.get(0);
+        LinkedList<PElem> listNode3 = new LinkedList<>();
+        listNode3 = (LinkedList<PElem>)nodeArrayList2.get(0);
         if(listNode3 != null)
         {
             if(!listNode4.isEmpty()){
@@ -9265,7 +9186,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<TPkgId> listNode2 = new LinkedList<>();
         {
             // Block
         TPkgId tpkgidNode1;
@@ -9288,12 +9209,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TPkgId> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<TPkgId> listNode1 = new LinkedList<>();
         TPkgId tpkgidNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<TPkgId>)nodeArrayList1.get(0);
         tpkgidNode2 = (TPkgId)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9320,7 +9241,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PHelperDef> listNode2 = new LinkedList<>();
         {
             // Block
         PHelperDef phelperdefNode1;
@@ -9343,12 +9264,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PHelperDef> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PHelperDef> listNode1 = new LinkedList<>();
         PHelperDef phelperdefNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PHelperDef>)nodeArrayList1.get(0);
         phelperdefNode2 = (PHelperDef)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9375,7 +9296,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<TId> listNode2 = new LinkedList<>();
         {
             // Block
         TId tidNode1;
@@ -9398,12 +9319,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<TId> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<TId> listNode1 = new LinkedList<>();
         TId tidNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<TId>)nodeArrayList1.get(0);
         tidNode2 = (TId)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9430,7 +9351,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PTokenDef> listNode2 = new LinkedList<>();
         {
             // Block
         PTokenDef ptokendefNode1;
@@ -9453,12 +9374,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PTokenDef> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PTokenDef> listNode1 = new LinkedList<>();
         PTokenDef ptokendefNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PTokenDef>)nodeArrayList1.get(0);
         ptokendefNode2 = (PTokenDef)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9485,7 +9406,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PStateListTail> listNode2 = new LinkedList<>();
         {
             // Block
         PStateListTail pstatelisttailNode1;
@@ -9508,12 +9429,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PStateListTail> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PStateListTail> listNode1 = new LinkedList<>();
         PStateListTail pstatelisttailNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PStateListTail>)nodeArrayList1.get(0);
         pstatelisttailNode2 = (PStateListTail)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9540,7 +9461,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PConcat> listNode2 = new LinkedList<>();
         {
             // Block
         PConcat pconcatNode1;
@@ -9563,12 +9484,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PConcat> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PConcat> listNode1 = new LinkedList<>();
         PConcat pconcatNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PConcat>)nodeArrayList1.get(0);
         pconcatNode2 = (PConcat)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9595,7 +9516,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PUnExp> listNode2 = new LinkedList<>();
         {
             // Block
         PUnExp punexpNode1;
@@ -9618,12 +9539,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PUnExp> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PUnExp> listNode1 = new LinkedList<>();
         PUnExp punexpNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PUnExp>)nodeArrayList1.get(0);
         punexpNode2 = (PUnExp)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9650,7 +9571,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PProd> listNode2 = new LinkedList<>();
         {
             // Block
         PProd pprodNode1;
@@ -9673,12 +9594,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PProd> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PProd> listNode1 = new LinkedList<>();
         PProd pprodNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PProd>)nodeArrayList1.get(0);
         pprodNode2 = (PProd)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9705,7 +9626,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PElem> listNode2 = new LinkedList<>();
         {
             // Block
         PElem pelemNode1;
@@ -9728,12 +9649,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PElem> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PElem> listNode1 = new LinkedList<>();
         PElem pelemNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PElem>)nodeArrayList1.get(0);
         pelemNode2 = (PElem)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9760,7 +9681,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PAlt> listNode2 = new LinkedList<>();
         {
             // Block
         PAlt paltNode1;
@@ -9783,12 +9704,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PAlt> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PAlt> listNode1 = new LinkedList<>();
         PAlt paltNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PAlt>)nodeArrayList1.get(0);
         paltNode2 = (PAlt)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9815,7 +9736,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PTerm> listNode2 = new LinkedList<>();
         {
             // Block
         PTerm ptermNode1;
@@ -9838,12 +9759,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PTerm> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PTerm> listNode1 = new LinkedList<>();
         PTerm ptermNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PTerm>)nodeArrayList1.get(0);
         ptermNode2 = (PTerm)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9870,7 +9791,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PListTerm> listNode2 = new LinkedList<>();
         {
             // Block
         PListTerm plisttermNode1;
@@ -9893,12 +9814,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PListTerm> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PListTerm> listNode1 = new LinkedList<>();
         PListTerm plisttermNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PListTerm>)nodeArrayList1.get(0);
         plisttermNode2 = (PListTerm)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9925,7 +9846,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PTerm> listNode2 = new LinkedList<>();
         {
             // Block
         PTerm ptermNode1;
@@ -9948,12 +9869,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PTerm> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PTerm> listNode1 = new LinkedList<>();
         PTerm ptermNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PTerm>)nodeArrayList1.get(0);
         ptermNode2 = (PTerm)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -9980,7 +9901,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PAstProd> listNode2 = new LinkedList<>();
         {
             // Block
         PAstProd pastprodNode1;
@@ -10003,12 +9924,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PAstProd> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PAstProd> listNode1 = new LinkedList<>();
         PAstProd pastprodNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PAstProd>)nodeArrayList1.get(0);
         pastprodNode2 = (PAstProd)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
@@ -10035,7 +9956,7 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode2 = new LinkedList();
+        LinkedList<PAstAlt> listNode2 = new LinkedList<>();
         {
             // Block
         PAstAlt pastaltNode1;
@@ -10058,12 +9979,12 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        LinkedList listNode3 = new LinkedList();
+        LinkedList<PAstAlt> listNode3 = new LinkedList<>();
         {
             // Block
-        LinkedList listNode1 = new LinkedList();
+        LinkedList<PAstAlt> listNode1 = new LinkedList<>();
         PAstAlt pastaltNode2;
-        listNode1 = (LinkedList)nodeArrayList1.get(0);
+        listNode1 = (LinkedList<PAstAlt>)nodeArrayList1.get(0);
         pastaltNode2 = (PAstAlt)nodeArrayList2.get(0);
         if(listNode1 != null)
         {
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index ea838eadbbcd32735cd976f7ba7142d24beb6169..a85d8a57823a5b222f5b06778760f5086bf2e365 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -15,6 +15,7 @@ import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
@@ -27,7 +28,7 @@ import $0$lexer.Lexer;
 import $0$lexer.LexerException;
 import $0$node.*;
 
-@SuppressWarnings({"rawtypes", "unchecked", "unused"})
+@SuppressWarnings({"unchecked", "unused"})
 public class Parser implements IParser
 {
     protected List<Object> nodeList;
@@ -338,7 +339,7 @@ Macro:ParserSimpleVariableDeclaration
 $
 
 Macro:ParserListVariableDeclaration
-        LinkedList $0$ = new LinkedList();
+        $0$ $1$ = new LinkedList<>();
 
 $