diff --git a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
index 7f3206556dabdda14fb79b8aee02e827f2c73054..bef0247a9605e2e8c674debaf5e95b6ecf0d204d 100644
--- a/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenerateAlternativeCodeForParser.java
@@ -139,14 +139,7 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
       macros.apply(file, "ParserBraceOpening");
     }
 
-    if(typeName.startsWith("L"))
-    {
-      macros.apply(file, "ParserListVariableDeclaration", new String[] {variableTypeFromInternalType(typeName), getVariableName(term)});
-    }
-    else
-    {
-      macros.apply(file, "ParserSimpleVariableDeclaration", new String[] {variableTypeFromInternalType(typeName), getVariableName(term)});
-    }
+    macros.apply(file, "ParserVariableDeclaration", new String[] {variableTypeFromInternalType(typeName), getVariableName(term)});
     return true;
   }
 
@@ -260,6 +253,12 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
   @Override
   public void caseAListTerm(AListTerm node)
   {
+    if(node.getListTerms().isEmpty())
+    {
+      // Empty lists are generated inline and don't have a variable.
+      return;
+    }
+
     try
     {
       boolean openingBraceGenerated = false;
@@ -273,13 +272,57 @@ public class GenerateAlternativeCodeForParser extends DepthFirstAdapter
         listTerm.apply(this);
       }
 
+      int nonNullTermsCount = 0;
+      PListTerm firstNonNullListTerm = null;
+      String firstNonNullTypeName = null;
       for(PListTerm listTerm : node.getListTerms())
       {
-        String type_name = lookupInternalTypeName(listTerm);
+        String typeName = lookupInternalTypeName(listTerm);
+        // Null and empty list terms never add any elements to the list and so don't need to be counted.
+        if("null".equals(typeName) || "Lnull".equals(typeName))
+        {
+          continue;
+        }
+        nonNullTermsCount++;
+        if(firstNonNullListTerm == null)
+        {
+          firstNonNullListTerm = listTerm;
+          firstNonNullTypeName = typeName;
+        }
+      }
+
+      if(nonNullTermsCount == 0)
+      {
+        throw new RuntimeException("List has non-empty type, but contains no elements!");
+      }
+      assert firstNonNullListTerm != null;
+      assert firstNonNullTypeName != null;
+
+      if(nonNullTermsCount == 1)
+      {
+        if(firstNonNullTypeName.startsWith("L"))
+        {
+          macros.apply(file, "ParserTypedListAssign", new String[] {getVariableName(node), getVariableName(firstNonNullListTerm)});
+        }
+        else
+        {
+          macros.apply(file, "ParserTypedSingleElementList", new String[] {getVariableName(node), getVariableName(firstNonNullListTerm)});
+        }
+      }
+      else
+      {
+        macros.apply(file, "ParserTypedLinkedListInit", new String[] {getVariableName(node)});
 
-        if(!type_name.equals("null"))
+        for(PListTerm listTerm : node.getListTerms())
         {
-          if(type_name.startsWith("L"))
+          String typeName = lookupInternalTypeName(listTerm);
+          // Null and empty list terms never add any elements to the list.
+          if("null".equals(typeName) || "Lnull".equals(typeName))
+          {
+            continue;
+          }
+
+          if(typeName.startsWith("L"))
           {
             macros.apply(file, "ParserTypedLinkedListAddAll", new String[] {getVariableName(node), getVariableName(listTerm)});
           }
diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index 1dfa84e83bd547dfa1e5b3a8728515f518ff8998..5e7c14887c3ecc065ba217e53d7f5a99c0e06f49 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -1877,18 +1877,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         pgrammarNode1 = new AGrammar(listNode3, null, null, null, null, null, null);
@@ -1927,19 +1920,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
 
@@ -1979,19 +1965,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
 
@@ -2035,20 +2014,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -2089,19 +2061,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
 
@@ -2145,20 +2110,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -2203,20 +2161,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -2265,21 +2216,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -2321,19 +2265,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
 
@@ -2377,20 +2314,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -2435,20 +2365,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -2497,21 +2420,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -2557,20 +2473,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -2619,21 +2528,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -2683,21 +2585,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -2751,22 +2646,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -2809,19 +2697,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
 
@@ -2865,20 +2746,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -2923,20 +2797,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -2985,21 +2852,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -3045,20 +2905,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -3107,21 +2960,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -3171,21 +3017,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -3239,22 +3078,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -3301,20 +3133,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -3363,21 +3188,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -3427,21 +3245,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -3495,22 +3306,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -3561,21 +3365,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -3629,22 +3426,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -3699,22 +3489,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -3773,23 +3556,16 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -3833,19 +3609,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pastNode9 = (PAst)nodeArrayList2.get(0);
 
@@ -3889,20 +3658,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pastNode9 = (PAst)nodeArrayList3.get(0);
@@ -3947,20 +3709,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         pastNode9 = (PAst)nodeArrayList3.get(0);
@@ -4009,21 +3764,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -4069,20 +3817,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
         pastNode9 = (PAst)nodeArrayList3.get(0);
@@ -4131,21 +3872,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -4195,21 +3929,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -4263,22 +3990,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -4325,20 +4045,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
         pastNode9 = (PAst)nodeArrayList3.get(0);
@@ -4387,21 +4100,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -4451,21 +4157,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -4519,22 +4218,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -4585,21 +4277,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -4653,22 +4338,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -4723,22 +4401,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -4797,23 +4468,16 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -4861,20 +4525,13 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pproductionsNode8 = (PProductions)nodeArrayList2.get(0);
         pastNode9 = (PAst)nodeArrayList3.get(0);
@@ -4923,21 +4580,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -4987,21 +4637,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -5055,22 +4698,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -5121,21 +4757,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -5189,22 +4818,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -5259,22 +4881,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -5333,23 +4948,16 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -5401,21 +5009,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pigntokensNode7 = (PIgnTokens)nodeArrayList2.get(0);
         pproductionsNode8 = (PProductions)nodeArrayList3.get(0);
@@ -5469,22 +5070,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -5539,22 +5133,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -5613,23 +5200,16 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -5685,22 +5265,15 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         ptokensNode6 = (PTokens)nodeArrayList2.get(0);
         pigntokensNode7 = (PIgnTokens)nodeArrayList3.get(0);
@@ -5759,23 +5332,16 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -5835,23 +5401,16 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
         PProductions pproductionsNode8;
         PAst pastNode9;
         {
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         pstatesNode5 = (PStates)nodeArrayList2.get(0);
         ptokensNode6 = (PTokens)nodeArrayList3.get(0);
@@ -5915,24 +5474,17 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PGrammar pgrammarNode1;
         {
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         PHelpers phelpersNode4;
         PStates pstatesNode5;
         PTokens ptokensNode6;
         PIgnTokens pigntokensNode7;
-        PProductions pproductionsNode8;
-        PAst pastNode9;
-        {
-        List<TPkgId> listNode2 = new LinkedList<>();
-        listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        PProductions pproductionsNode8;
+        PAst pastNode9;
+        {
+        List<TPkgId> listNode2;
+        listNode2 = (List<TPkgId>)nodeArrayList1.get(0);
+        listNode3 = listNode2;
         }
         phelpersNode4 = (PHelpers)nodeArrayList2.get(0);
         pstatesNode5 = (PStates)nodeArrayList3.get(0);
@@ -5956,18 +5508,11 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         {
-        List<TPkgId> listNode1 = new LinkedList<>();
+        List<TPkgId> listNode1;
         listNode1 = (List<TPkgId>)nodeArrayList2.get(0);
-        if(listNode1 != null)
-        {
-            if(!listNode2.isEmpty()){
-                listNode2.addAll(listNode1);
-            }else{
-                listNode2 = listNode1;
-            }
-        }
+        listNode2 = listNode1;
         }
         nodeList.add(listNode2);
         checkResult(nodeList.get(0), nodeArrayList1, nodeArrayList2);
@@ -5982,13 +5527,14 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         {
         TPkgId tpkgidNode1;
         tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-        if(tpkgidNode1 != null)
-        {
-            listNode2.add(tpkgidNode1);
+        if(tpkgidNode1 != null) {
+            listNode2 = Collections.singletonList(tpkgidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -6005,22 +5551,23 @@ public class Parser implements IParser
         List<Object> nodeArrayList3 = pop();
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         {
         TPkgId tpkgidNode1;
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
         listNode2 = (List<TPkgId>)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(tpkgidNode1 != null)
         {
             listNode3.add(tpkgidNode1);
         }
         if(listNode2 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
+            if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
                 listNode3 = listNode2;
+            } else {
+                listNode3.addAll(listNode2);
             }
         }
         }
@@ -6054,18 +5601,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PHelpers phelpersNode1;
         {
-        List<PHelperDef> listNode3 = new LinkedList<>();
+        List<PHelperDef> listNode3;
         {
-        List<PHelperDef> listNode2 = new LinkedList<>();
+        List<PHelperDef> listNode2;
         listNode2 = (List<PHelperDef>)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         phelpersNode1 = new AHelpers(listNode3);
@@ -6110,18 +5650,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PStates pstatesNode1;
         {
-        List<TId> listNode3 = new LinkedList<>();
+        List<TId> listNode3;
         {
-        List<TId> listNode2 = new LinkedList<>();
+        List<TId> listNode2;
         listNode2 = (List<TId>)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         pstatesNode1 = new AStates(listNode3);
@@ -6138,13 +5671,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<TId> listNode2 = new LinkedList<>();
+        List<TId> listNode2;
         {
         TId tidNode1;
         tidNode1 = (TId)nodeArrayList1.get(0);
-        if(tidNode1 != null)
-        {
-            listNode2.add(tidNode1);
+        if(tidNode1 != null) {
+            listNode2 = Collections.singletonList(tidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -6160,22 +5694,23 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<TId> listNode3 = new LinkedList<>();
+        List<TId> listNode3;
         {
         TId tidNode1;
-        List<TId> listNode2 = new LinkedList<>();
+        List<TId> listNode2;
         tidNode1 = (TId)nodeArrayList1.get(0);
         listNode2 = (List<TId>)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(tidNode1 != null)
         {
             listNode3.add(tidNode1);
         }
         if(listNode2 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
+            if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
                 listNode3 = listNode2;
+            } else {
+                listNode3.addAll(listNode2);
             }
         }
         }
@@ -6209,18 +5744,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PTokens ptokensNode1;
         {
-        List<PTokenDef> listNode3 = new LinkedList<>();
+        List<PTokenDef> listNode3;
         {
-        List<PTokenDef> listNode2 = new LinkedList<>();
+        List<PTokenDef> listNode2;
         listNode2 = (List<PTokenDef>)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         ptokensNode1 = new ATokens(listNode3);
@@ -6400,19 +5928,12 @@ public class Parser implements IParser
         PStateList pstatelistNode1;
         {
         TId tidNode2;
-        List<PStateListTail> listNode5 = new LinkedList<>();
+        List<PStateListTail> listNode5;
         tidNode2 = (TId)nodeArrayList2.get(0);
         {
-        List<PStateListTail> listNode4 = new LinkedList<>();
+        List<PStateListTail> listNode4;
         listNode4 = (List<PStateListTail>)nodeArrayList3.get(0);
-        if(listNode4 != null)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
+        listNode5 = listNode4;
         }
 
         pstatelistNode1 = new AStateList(tidNode2, null, listNode5);
@@ -6437,20 +5958,13 @@ public class Parser implements IParser
         {
         TId tidNode2;
         PTransition ptransitionNode3;
-        List<PStateListTail> listNode5 = new LinkedList<>();
+        List<PStateListTail> listNode5;
         tidNode2 = (TId)nodeArrayList2.get(0);
         ptransitionNode3 = (PTransition)nodeArrayList3.get(0);
         {
-        List<PStateListTail> listNode4 = new LinkedList<>();
+        List<PStateListTail> listNode4;
         listNode4 = (List<PStateListTail>)nodeArrayList4.get(0);
-        if(listNode4 != null)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
+        listNode5 = listNode4;
         }
 
         pstatelistNode1 = new AStateList(tidNode2, ptransitionNode3, listNode5);
@@ -6552,18 +6066,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PIgnTokens pigntokensNode1;
         {
-        List<TId> listNode3 = new LinkedList<>();
+        List<TId> listNode3;
         {
-        List<TId> listNode2 = new LinkedList<>();
+        List<TId> listNode2;
         listNode2 = (List<TId>)nodeArrayList3.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         pigntokensNode1 = new AIgnTokens(listNode3);
@@ -6600,13 +6107,14 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PRegExp pregexpNode1;
         {
-        List<PConcat> listNode3 = new LinkedList<>();
+        List<PConcat> listNode3;
         {
         PConcat pconcatNode2;
         pconcatNode2 = (PConcat)nodeArrayList1.get(0);
-        if(pconcatNode2 != null)
-        {
-            listNode3.add(pconcatNode2);
+        if(pconcatNode2 != null) {
+            listNode3 = Collections.singletonList(pconcatNode2);
+        } else {
+            listNode3 = Collections.emptyList();
         }
         }
 
@@ -6627,22 +6135,23 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PRegExp pregexpNode1;
         {
-        List<PConcat> listNode4 = new LinkedList<>();
+        List<PConcat> listNode4;
         {
         PConcat pconcatNode2;
-        List<PConcat> listNode3 = new LinkedList<>();
+        List<PConcat> listNode3;
         pconcatNode2 = (PConcat)nodeArrayList1.get(0);
         listNode3 = (List<PConcat>)nodeArrayList2.get(0);
+        listNode4 = new LinkedList<>();
         if(pconcatNode2 != null)
         {
             listNode4.add(pconcatNode2);
         }
         if(listNode3 != null)
         {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
+            if (listNode4.isEmpty() && listNode3 instanceof LinkedList<?>) {
                 listNode4 = listNode3;
+            } else {
+                listNode4.addAll(listNode3);
             }
         }
         }
@@ -6691,18 +6200,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PConcat pconcatNode1;
         {
-        List<PUnExp> listNode3 = new LinkedList<>();
+        List<PUnExp> listNode3;
         {
-        List<PUnExp> listNode2 = new LinkedList<>();
+        List<PUnExp> listNode2;
         listNode2 = (List<PUnExp>)nodeArrayList1.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         pconcatNode1 = new AConcat(listNode3);
@@ -7056,18 +6558,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PProductions pproductionsNode1;
         {
-        List<PProd> listNode3 = new LinkedList<>();
+        List<PProd> listNode3;
         {
-        List<PProd> listNode2 = new LinkedList<>();
+        List<PProd> listNode2;
         listNode2 = (List<PProd>)nodeArrayList2.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         pproductionsNode1 = new AProductions(listNode3);
@@ -7090,19 +6585,12 @@ public class Parser implements IParser
         PProd pprodNode1;
         {
         TId tidNode2;
-        List<PAlt> listNode6 = new LinkedList<>();
+        List<PAlt> listNode6;
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
-        List<PAlt> listNode5 = new LinkedList<>();
+        List<PAlt> listNode5;
         listNode5 = (List<PAlt>)nodeArrayList3.get(0);
-        if(listNode5 != null)
-        {
-            if(!listNode6.isEmpty()){
-                listNode6.addAll(listNode5);
-            }else{
-                listNode6 = listNode5;
-            }
-        }
+        listNode6 = listNode5;
         }
 
         pprodNode1 = new AProd(tidNode2, null, Collections.EMPTY_LIST, listNode6);
@@ -7127,33 +6615,19 @@ public class Parser implements IParser
         {
         TId tidNode2;
         TArrow tarrowNode3;
-        List<PElem> listNode5 = new LinkedList<>();
-        List<PAlt> listNode7 = new LinkedList<>();
+        List<PElem> listNode5;
+        List<PAlt> listNode7;
         tidNode2 = (TId)nodeArrayList1.get(0);
         tarrowNode3 = (TArrow)nodeArrayList2.get(0);
         {
-        List<PElem> listNode4 = new LinkedList<>();
+        List<PElem> listNode4;
         listNode4 = (List<PElem>)nodeArrayList2.get(1);
-        if(listNode4 != null)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
+        listNode5 = listNode4;
         }
         {
-        List<PAlt> listNode6 = new LinkedList<>();
+        List<PAlt> listNode6;
         listNode6 = (List<PAlt>)nodeArrayList4.get(0);
-        if(listNode6 != null)
-        {
-            if(!listNode7.isEmpty()){
-                listNode7.addAll(listNode6);
-            }else{
-                listNode7 = listNode6;
-            }
-        }
+        listNode7 = listNode6;
         }
 
         pprodNode1 = new AProd(tidNode2, tarrowNode3, listNode5, listNode7);
@@ -7191,19 +6665,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
         TArrow tarrowNode1;
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         tarrowNode1 = (TArrow)nodeArrayList2.get(0);
         {
-        List<PElem> listNode2 = new LinkedList<>();
+        List<PElem> listNode2;
         listNode2 = (List<PElem>)nodeArrayList3.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
         nodeList.add(tarrowNode1);
         nodeList.add(listNode3);
@@ -7218,13 +6685,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PAlt> listNode2 = new LinkedList<>();
+        List<PAlt> listNode2;
         {
         PAlt paltNode1;
         paltNode1 = (PAlt)nodeArrayList1.get(0);
-        if(paltNode1 != null)
-        {
-            listNode2.add(paltNode1);
+        if(paltNode1 != null) {
+            listNode2 = Collections.singletonList(paltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -7240,22 +6708,23 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PAlt> listNode3 = new LinkedList<>();
+        List<PAlt> listNode3;
         {
         PAlt paltNode1;
-        List<PAlt> listNode2 = new LinkedList<>();
+        List<PAlt> listNode2;
         paltNode1 = (PAlt)nodeArrayList1.get(0);
         listNode2 = (List<PAlt>)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(paltNode1 != null)
         {
             listNode3.add(paltNode1);
         }
         if(listNode2 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
+            if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
                 listNode3 = listNode2;
+            } else {
+                listNode3.addAll(listNode2);
             }
         }
         }
@@ -7320,18 +6789,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PAlt paltNode1;
         {
-        List<PElem> listNode4 = new LinkedList<>();
+        List<PElem> listNode4;
         {
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         listNode3 = (List<PElem>)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
 
         paltNode1 = new AAlt(null, listNode4, null);
@@ -7352,19 +6814,12 @@ public class Parser implements IParser
         PAlt paltNode1;
         {
         TId tidNode2;
-        List<PElem> listNode4 = new LinkedList<>();
+        List<PElem> listNode4;
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         listNode3 = (List<PElem>)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
 
         paltNode1 = new AAlt(tidNode2, listNode4, null);
@@ -7425,19 +6880,12 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PAlt paltNode1;
         {
-        List<PElem> listNode4 = new LinkedList<>();
+        List<PElem> listNode4;
         PAltTransform palttransformNode5;
         {
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         listNode3 = (List<PElem>)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
         palttransformNode5 = (PAltTransform)nodeArrayList2.get(0);
 
@@ -7460,20 +6908,13 @@ public class Parser implements IParser
         PAlt paltNode1;
         {
         TId tidNode2;
-        List<PElem> listNode4 = new LinkedList<>();
+        List<PElem> listNode4;
         PAltTransform palttransformNode5;
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         listNode3 = (List<PElem>)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
         palttransformNode5 = (PAltTransform)nodeArrayList3.get(0);
 
@@ -7520,20 +6961,13 @@ public class Parser implements IParser
         PAltTransform palttransformNode1;
         {
         TLBrace tlbraceNode2;
-        List<PTerm> listNode4 = new LinkedList<>();
+        List<PTerm> listNode4;
         TRBrace trbraceNode5;
         tlbraceNode2 = (TLBrace)nodeArrayList1.get(0);
         {
-        List<PTerm> listNode3 = new LinkedList<>();
+        List<PTerm> listNode3;
         listNode3 = (List<PTerm>)nodeArrayList3.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
         trbraceNode5 = (TRBrace)nodeArrayList4.get(0);
 
@@ -7583,20 +7017,13 @@ public class Parser implements IParser
         {
         PProdName pprodnameNode2;
         TLPar tlparNode3;
-        List<PTerm> listNode5 = new LinkedList<>();
+        List<PTerm> listNode5;
         pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
         tlparNode3 = (TLPar)nodeArrayList3.get(0);
         {
-        List<PTerm> listNode4 = new LinkedList<>();
+        List<PTerm> listNode4;
         listNode4 = (List<PTerm>)nodeArrayList4.get(0);
-        if(listNode4 != null)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
+        listNode5 = listNode4;
         }
 
         ptermNode1 = new ANewTerm(pprodnameNode2, tlparNode3, listNode5);
@@ -7638,19 +7065,12 @@ public class Parser implements IParser
         PTerm ptermNode1;
         {
         TLBkt tlbktNode2;
-        List<PListTerm> listNode4 = new LinkedList<>();
+        List<PListTerm> listNode4;
         tlbktNode2 = (TLBkt)nodeArrayList1.get(0);
         {
-        List<PListTerm> listNode3 = new LinkedList<>();
+        List<PListTerm> listNode3;
         listNode3 = (List<PListTerm>)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
 
         ptermNode1 = new AListTerm(tlbktNode2, listNode4);
@@ -7770,13 +7190,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PListTerm> listNode2 = new LinkedList<>();
+        List<PListTerm> listNode2;
         {
         PListTerm plisttermNode1;
         plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-        if(plisttermNode1 != null)
-        {
-            listNode2.add(plisttermNode1);
+        if(plisttermNode1 != null) {
+            listNode2 = Collections.singletonList(plisttermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -7792,22 +7213,23 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PListTerm> listNode3 = new LinkedList<>();
+        List<PListTerm> listNode3;
         {
         PListTerm plisttermNode1;
-        List<PListTerm> listNode2 = new LinkedList<>();
+        List<PListTerm> listNode2;
         plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
         listNode2 = (List<PListTerm>)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(plisttermNode1 != null)
         {
             listNode3.add(plisttermNode1);
         }
         if(listNode2 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
+            if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
                 listNode3 = listNode2;
+            } else {
+                listNode3.addAll(listNode2);
             }
         }
         }
@@ -7855,20 +7277,13 @@ public class Parser implements IParser
         {
         PProdName pprodnameNode2;
         TLPar tlparNode3;
-        List<PTerm> listNode5 = new LinkedList<>();
+        List<PTerm> listNode5;
         pprodnameNode2 = (PProdName)nodeArrayList2.get(0);
         tlparNode3 = (TLPar)nodeArrayList3.get(0);
         {
-        List<PTerm> listNode4 = new LinkedList<>();
+        List<PTerm> listNode4;
         listNode4 = (List<PTerm>)nodeArrayList4.get(0);
-        if(listNode4 != null)
-        {
-            if(!listNode5.isEmpty()){
-                listNode5.addAll(listNode4);
-            }else{
-                listNode5 = listNode4;
-            }
-        }
+        listNode5 = listNode4;
         }
 
         plisttermNode1 = new ANewListTerm(pprodnameNode2, tlparNode3, listNode5);
@@ -8059,13 +7474,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PTerm> listNode2 = new LinkedList<>();
+        List<PTerm> listNode2;
         {
         PTerm ptermNode1;
         ptermNode1 = (PTerm)nodeArrayList1.get(0);
-        if(ptermNode1 != null)
-        {
-            listNode2.add(ptermNode1);
+        if(ptermNode1 != null) {
+            listNode2 = Collections.singletonList(ptermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8081,22 +7497,23 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PTerm> listNode3 = new LinkedList<>();
+        List<PTerm> listNode3;
         {
         PTerm ptermNode1;
-        List<PTerm> listNode2 = new LinkedList<>();
+        List<PTerm> listNode2;
         ptermNode1 = (PTerm)nodeArrayList1.get(0);
         listNode2 = (List<PTerm>)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(ptermNode1 != null)
         {
             listNode3.add(ptermNode1);
         }
         if(listNode2 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
+            if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
                 listNode3 = listNode2;
+            } else {
+                listNode3.addAll(listNode2);
             }
         }
         }
@@ -8385,18 +7802,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PAst pastNode1;
         {
-        List<PAstProd> listNode3 = new LinkedList<>();
+        List<PAstProd> listNode3;
         {
-        List<PAstProd> listNode2 = new LinkedList<>();
+        List<PAstProd> listNode2;
         listNode2 = (List<PAstProd>)nodeArrayList4.get(0);
-        if(listNode2 != null)
-        {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
-                listNode3 = listNode2;
-            }
-        }
+        listNode3 = listNode2;
         }
 
         pastNode1 = new AAst(listNode3);
@@ -8419,19 +7829,12 @@ public class Parser implements IParser
         PAstProd pastprodNode1;
         {
         TId tidNode2;
-        List<PAstAlt> listNode4 = new LinkedList<>();
+        List<PAstAlt> listNode4;
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
-        List<PAstAlt> listNode3 = new LinkedList<>();
+        List<PAstAlt> listNode3;
         listNode3 = (List<PAstAlt>)nodeArrayList3.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
 
         pastprodNode1 = new AAstProd(tidNode2, listNode4);
@@ -8448,13 +7851,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PAstAlt> listNode2 = new LinkedList<>();
+        List<PAstAlt> listNode2;
         {
         PAstAlt pastaltNode1;
         pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-        if(pastaltNode1 != null)
-        {
-            listNode2.add(pastaltNode1);
+        if(pastaltNode1 != null) {
+            listNode2 = Collections.singletonList(pastaltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8470,22 +7874,23 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PAstAlt> listNode3 = new LinkedList<>();
+        List<PAstAlt> listNode3;
         {
         PAstAlt pastaltNode1;
-        List<PAstAlt> listNode2 = new LinkedList<>();
+        List<PAstAlt> listNode2;
         pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
         listNode2 = (List<PAstAlt>)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(pastaltNode1 != null)
         {
             listNode3.add(pastaltNode1);
         }
         if(listNode2 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode2);
-            }else{
+            if (listNode3.isEmpty() && listNode2 instanceof LinkedList<?>) {
                 listNode3 = listNode2;
+            } else {
+                listNode3.addAll(listNode2);
             }
         }
         }
@@ -8550,18 +7955,11 @@ public class Parser implements IParser
         List<Object> nodeArrayList1 = pop();
         PAstAlt pastaltNode1;
         {
-        List<PElem> listNode4 = new LinkedList<>();
+        List<PElem> listNode4;
         {
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         listNode3 = (List<PElem>)nodeArrayList1.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
 
         pastaltNode1 = new AAstAlt(null, listNode4);
@@ -8582,19 +7980,12 @@ public class Parser implements IParser
         PAstAlt pastaltNode1;
         {
         TId tidNode2;
-        List<PElem> listNode4 = new LinkedList<>();
+        List<PElem> listNode4;
         tidNode2 = (TId)nodeArrayList1.get(0);
         {
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         listNode3 = (List<PElem>)nodeArrayList2.get(0);
-        if(listNode3 != null)
-        {
-            if(!listNode4.isEmpty()){
-                listNode4.addAll(listNode3);
-            }else{
-                listNode4 = listNode3;
-            }
-        }
+        listNode4 = listNode3;
         }
 
         pastaltNode1 = new AAstAlt(tidNode2, listNode4);
@@ -8611,13 +8002,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<TPkgId> listNode2 = new LinkedList<>();
+        List<TPkgId> listNode2;
         {
         TPkgId tpkgidNode1;
         tpkgidNode1 = (TPkgId)nodeArrayList1.get(0);
-        if(tpkgidNode1 != null)
-        {
-            listNode2.add(tpkgidNode1);
+        if(tpkgidNode1 != null) {
+            listNode2 = Collections.singletonList(tpkgidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8633,18 +8025,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<TPkgId> listNode3 = new LinkedList<>();
+        List<TPkgId> listNode3;
         {
-        List<TPkgId> listNode1 = new LinkedList<>();
+        List<TPkgId> listNode1;
         TPkgId tpkgidNode2;
         listNode1 = (List<TPkgId>)nodeArrayList1.get(0);
         tpkgidNode2 = (TPkgId)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(tpkgidNode2 != null)
@@ -8664,13 +8057,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PHelperDef> listNode2 = new LinkedList<>();
+        List<PHelperDef> listNode2;
         {
         PHelperDef phelperdefNode1;
         phelperdefNode1 = (PHelperDef)nodeArrayList1.get(0);
-        if(phelperdefNode1 != null)
-        {
-            listNode2.add(phelperdefNode1);
+        if(phelperdefNode1 != null) {
+            listNode2 = Collections.singletonList(phelperdefNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8686,18 +8080,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PHelperDef> listNode3 = new LinkedList<>();
+        List<PHelperDef> listNode3;
         {
-        List<PHelperDef> listNode1 = new LinkedList<>();
+        List<PHelperDef> listNode1;
         PHelperDef phelperdefNode2;
         listNode1 = (List<PHelperDef>)nodeArrayList1.get(0);
         phelperdefNode2 = (PHelperDef)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(phelperdefNode2 != null)
@@ -8717,13 +8112,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<TId> listNode2 = new LinkedList<>();
+        List<TId> listNode2;
         {
         TId tidNode1;
         tidNode1 = (TId)nodeArrayList1.get(0);
-        if(tidNode1 != null)
-        {
-            listNode2.add(tidNode1);
+        if(tidNode1 != null) {
+            listNode2 = Collections.singletonList(tidNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8739,18 +8135,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<TId> listNode3 = new LinkedList<>();
+        List<TId> listNode3;
         {
-        List<TId> listNode1 = new LinkedList<>();
+        List<TId> listNode1;
         TId tidNode2;
         listNode1 = (List<TId>)nodeArrayList1.get(0);
         tidNode2 = (TId)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(tidNode2 != null)
@@ -8770,13 +8167,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PTokenDef> listNode2 = new LinkedList<>();
+        List<PTokenDef> listNode2;
         {
         PTokenDef ptokendefNode1;
         ptokendefNode1 = (PTokenDef)nodeArrayList1.get(0);
-        if(ptokendefNode1 != null)
-        {
-            listNode2.add(ptokendefNode1);
+        if(ptokendefNode1 != null) {
+            listNode2 = Collections.singletonList(ptokendefNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8792,18 +8190,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PTokenDef> listNode3 = new LinkedList<>();
+        List<PTokenDef> listNode3;
         {
-        List<PTokenDef> listNode1 = new LinkedList<>();
+        List<PTokenDef> listNode1;
         PTokenDef ptokendefNode2;
         listNode1 = (List<PTokenDef>)nodeArrayList1.get(0);
         ptokendefNode2 = (PTokenDef)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(ptokendefNode2 != null)
@@ -8823,13 +8222,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PStateListTail> listNode2 = new LinkedList<>();
+        List<PStateListTail> listNode2;
         {
         PStateListTail pstatelisttailNode1;
         pstatelisttailNode1 = (PStateListTail)nodeArrayList1.get(0);
-        if(pstatelisttailNode1 != null)
-        {
-            listNode2.add(pstatelisttailNode1);
+        if(pstatelisttailNode1 != null) {
+            listNode2 = Collections.singletonList(pstatelisttailNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8845,18 +8245,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PStateListTail> listNode3 = new LinkedList<>();
+        List<PStateListTail> listNode3;
         {
-        List<PStateListTail> listNode1 = new LinkedList<>();
+        List<PStateListTail> listNode1;
         PStateListTail pstatelisttailNode2;
         listNode1 = (List<PStateListTail>)nodeArrayList1.get(0);
         pstatelisttailNode2 = (PStateListTail)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(pstatelisttailNode2 != null)
@@ -8876,13 +8277,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PConcat> listNode2 = new LinkedList<>();
+        List<PConcat> listNode2;
         {
         PConcat pconcatNode1;
         pconcatNode1 = (PConcat)nodeArrayList1.get(0);
-        if(pconcatNode1 != null)
-        {
-            listNode2.add(pconcatNode1);
+        if(pconcatNode1 != null) {
+            listNode2 = Collections.singletonList(pconcatNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8898,18 +8300,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PConcat> listNode3 = new LinkedList<>();
+        List<PConcat> listNode3;
         {
-        List<PConcat> listNode1 = new LinkedList<>();
+        List<PConcat> listNode1;
         PConcat pconcatNode2;
         listNode1 = (List<PConcat>)nodeArrayList1.get(0);
         pconcatNode2 = (PConcat)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(pconcatNode2 != null)
@@ -8929,13 +8332,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PUnExp> listNode2 = new LinkedList<>();
+        List<PUnExp> listNode2;
         {
         PUnExp punexpNode1;
         punexpNode1 = (PUnExp)nodeArrayList1.get(0);
-        if(punexpNode1 != null)
-        {
-            listNode2.add(punexpNode1);
+        if(punexpNode1 != null) {
+            listNode2 = Collections.singletonList(punexpNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -8951,18 +8355,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PUnExp> listNode3 = new LinkedList<>();
+        List<PUnExp> listNode3;
         {
-        List<PUnExp> listNode1 = new LinkedList<>();
+        List<PUnExp> listNode1;
         PUnExp punexpNode2;
         listNode1 = (List<PUnExp>)nodeArrayList1.get(0);
         punexpNode2 = (PUnExp)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(punexpNode2 != null)
@@ -8982,13 +8387,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PProd> listNode2 = new LinkedList<>();
+        List<PProd> listNode2;
         {
         PProd pprodNode1;
         pprodNode1 = (PProd)nodeArrayList1.get(0);
-        if(pprodNode1 != null)
-        {
-            listNode2.add(pprodNode1);
+        if(pprodNode1 != null) {
+            listNode2 = Collections.singletonList(pprodNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9004,18 +8410,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PProd> listNode3 = new LinkedList<>();
+        List<PProd> listNode3;
         {
-        List<PProd> listNode1 = new LinkedList<>();
+        List<PProd> listNode1;
         PProd pprodNode2;
         listNode1 = (List<PProd>)nodeArrayList1.get(0);
         pprodNode2 = (PProd)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(pprodNode2 != null)
@@ -9035,13 +8442,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PElem> listNode2 = new LinkedList<>();
+        List<PElem> listNode2;
         {
         PElem pelemNode1;
         pelemNode1 = (PElem)nodeArrayList1.get(0);
-        if(pelemNode1 != null)
-        {
-            listNode2.add(pelemNode1);
+        if(pelemNode1 != null) {
+            listNode2 = Collections.singletonList(pelemNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9057,18 +8465,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PElem> listNode3 = new LinkedList<>();
+        List<PElem> listNode3;
         {
-        List<PElem> listNode1 = new LinkedList<>();
+        List<PElem> listNode1;
         PElem pelemNode2;
         listNode1 = (List<PElem>)nodeArrayList1.get(0);
         pelemNode2 = (PElem)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(pelemNode2 != null)
@@ -9088,13 +8497,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PAlt> listNode2 = new LinkedList<>();
+        List<PAlt> listNode2;
         {
         PAlt paltNode1;
         paltNode1 = (PAlt)nodeArrayList1.get(0);
-        if(paltNode1 != null)
-        {
-            listNode2.add(paltNode1);
+        if(paltNode1 != null) {
+            listNode2 = Collections.singletonList(paltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9110,18 +8520,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PAlt> listNode3 = new LinkedList<>();
+        List<PAlt> listNode3;
         {
-        List<PAlt> listNode1 = new LinkedList<>();
+        List<PAlt> listNode1;
         PAlt paltNode2;
         listNode1 = (List<PAlt>)nodeArrayList1.get(0);
         paltNode2 = (PAlt)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(paltNode2 != null)
@@ -9141,13 +8552,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PTerm> listNode2 = new LinkedList<>();
+        List<PTerm> listNode2;
         {
         PTerm ptermNode1;
         ptermNode1 = (PTerm)nodeArrayList1.get(0);
-        if(ptermNode1 != null)
-        {
-            listNode2.add(ptermNode1);
+        if(ptermNode1 != null) {
+            listNode2 = Collections.singletonList(ptermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9163,18 +8575,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PTerm> listNode3 = new LinkedList<>();
+        List<PTerm> listNode3;
         {
-        List<PTerm> listNode1 = new LinkedList<>();
+        List<PTerm> listNode1;
         PTerm ptermNode2;
         listNode1 = (List<PTerm>)nodeArrayList1.get(0);
         ptermNode2 = (PTerm)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(ptermNode2 != null)
@@ -9194,13 +8607,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PListTerm> listNode2 = new LinkedList<>();
+        List<PListTerm> listNode2;
         {
         PListTerm plisttermNode1;
         plisttermNode1 = (PListTerm)nodeArrayList1.get(0);
-        if(plisttermNode1 != null)
-        {
-            listNode2.add(plisttermNode1);
+        if(plisttermNode1 != null) {
+            listNode2 = Collections.singletonList(plisttermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9216,18 +8630,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PListTerm> listNode3 = new LinkedList<>();
+        List<PListTerm> listNode3;
         {
-        List<PListTerm> listNode1 = new LinkedList<>();
+        List<PListTerm> listNode1;
         PListTerm plisttermNode2;
         listNode1 = (List<PListTerm>)nodeArrayList1.get(0);
         plisttermNode2 = (PListTerm)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(plisttermNode2 != null)
@@ -9247,13 +8662,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PTerm> listNode2 = new LinkedList<>();
+        List<PTerm> listNode2;
         {
         PTerm ptermNode1;
         ptermNode1 = (PTerm)nodeArrayList1.get(0);
-        if(ptermNode1 != null)
-        {
-            listNode2.add(ptermNode1);
+        if(ptermNode1 != null) {
+            listNode2 = Collections.singletonList(ptermNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9269,18 +8685,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PTerm> listNode3 = new LinkedList<>();
+        List<PTerm> listNode3;
         {
-        List<PTerm> listNode1 = new LinkedList<>();
+        List<PTerm> listNode1;
         PTerm ptermNode2;
         listNode1 = (List<PTerm>)nodeArrayList1.get(0);
         ptermNode2 = (PTerm)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(ptermNode2 != null)
@@ -9300,13 +8717,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PAstProd> listNode2 = new LinkedList<>();
+        List<PAstProd> listNode2;
         {
         PAstProd pastprodNode1;
         pastprodNode1 = (PAstProd)nodeArrayList1.get(0);
-        if(pastprodNode1 != null)
-        {
-            listNode2.add(pastprodNode1);
+        if(pastprodNode1 != null) {
+            listNode2 = Collections.singletonList(pastprodNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9322,18 +8740,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PAstProd> listNode3 = new LinkedList<>();
+        List<PAstProd> listNode3;
         {
-        List<PAstProd> listNode1 = new LinkedList<>();
+        List<PAstProd> listNode1;
         PAstProd pastprodNode2;
         listNode1 = (List<PAstProd>)nodeArrayList1.get(0);
         pastprodNode2 = (PAstProd)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(pastprodNode2 != null)
@@ -9353,13 +8772,14 @@ public class Parser implements IParser
         List<Object> nodeList = new ArrayList<>();
 
         List<Object> nodeArrayList1 = pop();
-        List<PAstAlt> listNode2 = new LinkedList<>();
+        List<PAstAlt> listNode2;
         {
         PAstAlt pastaltNode1;
         pastaltNode1 = (PAstAlt)nodeArrayList1.get(0);
-        if(pastaltNode1 != null)
-        {
-            listNode2.add(pastaltNode1);
+        if(pastaltNode1 != null) {
+            listNode2 = Collections.singletonList(pastaltNode1);
+        } else {
+            listNode2 = Collections.emptyList();
         }
         }
         nodeList.add(listNode2);
@@ -9375,18 +8795,19 @@ public class Parser implements IParser
 
         List<Object> nodeArrayList2 = pop();
         List<Object> nodeArrayList1 = pop();
-        List<PAstAlt> listNode3 = new LinkedList<>();
+        List<PAstAlt> listNode3;
         {
-        List<PAstAlt> listNode1 = new LinkedList<>();
+        List<PAstAlt> listNode1;
         PAstAlt pastaltNode2;
         listNode1 = (List<PAstAlt>)nodeArrayList1.get(0);
         pastaltNode2 = (PAstAlt)nodeArrayList2.get(0);
+        listNode3 = new LinkedList<>();
         if(listNode1 != null)
         {
-            if(!listNode3.isEmpty()){
-                listNode3.addAll(listNode1);
-            }else{
+            if (listNode3.isEmpty() && listNode1 instanceof LinkedList<?>) {
                 listNode3 = listNode1;
+            } else {
+                listNode3.addAll(listNode1);
             }
         }
         if(pastaltNode2 != null)
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index ab8fbc09b5bc36e336cc41762629c3bb7359e39f..951becb0a777c8ab3c622ddc51a72ada9ceff33b 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -330,16 +330,11 @@ Macro:ParserBraceClosing
 
 $
 
-Macro:ParserSimpleVariableDeclaration
+Macro:ParserVariableDeclaration
         $0$ $1$;
 
 $
 
-Macro:ParserListVariableDeclaration
-        $0$ $1$ = new LinkedList<>();
-
-$
-
 Macro:ParserSimpleTerm
         $0$ = ($1$)nodeArrayList$2$.get($3$);
 
@@ -359,6 +354,25 @@ Macro:ParserNewBodyNewTail
 
 $
 
+Macro:ParserTypedSingleElementList
+        if($1$ != null) {
+            $0$ = Collections.singletonList($1$);
+        } else {
+            $0$ = Collections.emptyList();
+        }
+
+$
+
+Macro:ParserTypedListAssign
+        $0$ = $1$;
+
+$
+
+Macro:ParserTypedLinkedListInit
+        $0$ = new LinkedList<>();
+
+$
+
 Macro:ParserTypedLinkedListAdd
         if($1$ != null)
         {
@@ -370,10 +384,10 @@ $
 Macro:ParserTypedLinkedListAddAll
         if($1$ != null)
         {
-            if(!$0$.isEmpty()){
-                $0$.addAll($1$);
-            }else{
+            if ($0$.isEmpty() && $1$ instanceof LinkedList<?>) {
                 $0$ = $1$;
+            } else {
+                $0$.addAll($1$);
             }
         }