diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4e6db468b178c544c92c15ca2532577b9a5fecc6..dbab00d258c59d292362448046d8951377e8eeb0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: openjdk:8-jdk-slim
+image: eclipse-temurin:8
 
 stages:
   - test
@@ -25,11 +25,11 @@ tests:
 
 tests:jdk-11:
   extends: tests
-  image: openjdk:11-jdk-slim
+  image: eclipse-temurin:11
 
 tests:jdk-17:
   extends: tests
-  image: openjdk:17-jdk-slim
+  image: eclipse-temurin:17
 
 publish:
   stage: deploy
diff --git a/build.gradle b/build.gradle
index fd5143c07a9038386135f8da1a2e4d80f35bbaaf..3c44cc91ff71ae41f89028dde206c8d3bb83150a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ apply plugin: 'signing'
 
 allprojects {
   project.group = 'de.hhu.stups'
-  project.version = '3.4.1'
+  project.version = '3.5.0'
   project.ext.isSnapshot = project.version.endsWith("-SNAPSHOT")
 
   ext."signing.secretKeyRingFile" = rootProject.file("secring.gpg").absolutePath
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java
index 1dcb9585ca7d56d0f5352788fcb05cc1f424da6b..ba7e1bd73d5055549766b479c5f3f579965ee220 100644
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java
+++ b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/IParser.java
@@ -10,5 +10,10 @@ import java.util.Map;
 
 
 public interface IParser {
+  /**
+   * @deprecated All generated token classes store their own position info.
+   *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
+   */
+  @Deprecated
   public Map<PositionedNode, SourcecodeRange> getMapping();
 }
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/ITokenListContainer.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/ITokenListContainer.java
index eb5eb885b4944beaa8dc15105ac33a0b8c2a7670..eb07fe5602f8b75df630419a334952d13cc5cf0d 100644
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/ITokenListContainer.java
+++ b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/ITokenListContainer.java
@@ -8,6 +8,16 @@ package de.hhu.stups.sablecc.patch;
 
 import java.util.List;
 
+/**
+ * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
+ *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+ */
+@Deprecated
 public interface ITokenListContainer {
+  /**
+   * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
+   *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+   */
+  @Deprecated
   public List<IToken> getTokenList();
 }
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcePositions.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcePositions.java
index 0c30041a68683e38cffc6399ab07abad7f4a570f..7dc66fd2e9d77ca876b9fc7a2454656f4fecac34 100644
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcePositions.java
+++ b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcePositions.java
@@ -10,6 +10,11 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * @deprecated All generated token classes store their own position info.
+ *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
+ */
+@Deprecated
 public class SourcePositions {
   private final List<IToken> tokenList;
   private final Map<PositionedNode, SourcecodeRange> positions;
diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcecodeRange.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcecodeRange.java
index 7f25cd153241510857a2e3f7b3ae2681ab35e8c9..f447a79ece3d80c995d1201fb0a12d45c860e87f 100644
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcecodeRange.java
+++ b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/SourcecodeRange.java
@@ -6,6 +6,7 @@
 
 package de.hhu.stups.sablecc.patch;
 
+@Deprecated
 public class SourcecodeRange {
   private final int beginIndex;
   private final int endIndex;
diff --git a/src/main/java/org/sablecc/sablecc/DisplayLicense.java b/src/main/java/org/sablecc/sablecc/DisplayLicense.java
index 75452da78c7e11502f8a9185b05cf6c15a267a62..cc212c4dee299709c44052aed5a31b92163f5b24 100644
--- a/src/main/java/org/sablecc/sablecc/DisplayLicense.java
+++ b/src/main/java/org/sablecc/sablecc/DisplayLicense.java
@@ -10,6 +10,7 @@ package org.sablecc.sablecc;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 
 class DisplayLicense
 {
@@ -20,7 +21,7 @@ class DisplayLicense
       BufferedReader in =
         new BufferedReader(
           new InputStreamReader(
-            getClass().getResourceAsStream("LICENSE")));
+            getClass().getResourceAsStream("LICENSE"), StandardCharsets.UTF_8));
       System.out.println("---- FILE: LICENSE ----");
 
       String s;
@@ -37,7 +38,7 @@ class DisplayLicense
       in =
         new BufferedReader(
           new InputStreamReader(
-            getClass().getResourceAsStream("AUTHORS")));
+            getClass().getResourceAsStream("AUTHORS"), StandardCharsets.UTF_8));
 
       while((s = in.readLine()) != null)
       {
@@ -52,7 +53,7 @@ class DisplayLicense
       in =
         new BufferedReader(
           new InputStreamReader(
-            getClass().getResourceAsStream("COPYING-LESSER")));
+            getClass().getResourceAsStream("COPYING-LESSER"), StandardCharsets.UTF_8));
 
       while((s = in.readLine()) != null)
       {
diff --git a/src/main/java/org/sablecc/sablecc/GenAlts.java b/src/main/java/org/sablecc/sablecc/GenAlts.java
index e2e706c9ff3be96128ed017a05b2cfa30ee4cd5c..08864efe759a81602e872dfe01a14b37ab43151a 100644
--- a/src/main/java/org/sablecc/sablecc/GenAlts.java
+++ b/src/main/java/org/sablecc/sablecc/GenAlts.java
@@ -9,9 +9,10 @@ package org.sablecc.sablecc;
 
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -24,7 +25,6 @@ public class GenAlts extends DepthFirstAdapter
   private MacroExpander macros;
   private ResolveAstIds ast_ids;
   private File pkgDir;
-  private String pkgName;
   private List<ElemInfo> elemList;
 
   private String currentProd;
@@ -38,7 +38,7 @@ public class GenAlts extends DepthFirstAdapter
     {
       macros = new MacroExpander(
                  new InputStreamReader(
-                   getClass().getResourceAsStream("alternatives.txt")));
+                   getClass().getResourceAsStream("alternatives.txt"), StandardCharsets.UTF_8));
     }
     catch(IOException e)
     {
@@ -46,7 +46,6 @@ public class GenAlts extends DepthFirstAdapter
     }
 
     pkgDir = new File(ast_ids.astIds.pkgDir, "node");
-    pkgName = ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node";
 
     if(!pkgDir.exists())
     {
@@ -114,7 +113,7 @@ public class GenAlts extends DepthFirstAdapter
   {
     String name = ast_ids.ast_names.get(node);
 
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, name + ".java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, name + ".java").toPath(), StandardCharsets.UTF_8))
     {
         boolean hasOperator = false;
         boolean hasList = false;
@@ -132,16 +131,14 @@ public class GenAlts extends DepthFirstAdapter
           }
       }
 
-      macros.apply(file, "AlternativeHeader1", new String[] {pkgName});
+      macros.apply(file, "AlternativeHeader1", new String[] {ast_ids.astIds.pkgNameDot});
 
       if(hasList)
       {
           macros.apply(file, "AlternativeHeaderList", new String[] {});
       }
 
-      macros.apply(file, "AlternativeHeader2", new String[] {
-              ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis",
-              name, currentProd});
+      macros.apply(file, "AlternativeHeader2", new String[] {ast_ids.astIds.pkgNameDot, name, currentProd});
 
       for(ElemInfo info : elemList)
       {
diff --git a/src/main/java/org/sablecc/sablecc/GenAnalyses.java b/src/main/java/org/sablecc/sablecc/GenAnalyses.java
index 629a7f4db76bae1f6257787b7c816b0f28435690..f56b61eeaab136193646d12d4b66e8e0b5c37dfc 100644
--- a/src/main/java/org/sablecc/sablecc/GenAnalyses.java
+++ b/src/main/java/org/sablecc/sablecc/GenAnalyses.java
@@ -9,9 +9,10 @@ package org.sablecc.sablecc;
 
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
@@ -24,7 +25,6 @@ public class GenAnalyses extends DepthFirstAdapter
   private MacroExpander macros;
   private ResolveAstIds ast_ids;
   private File pkgDir;
-  private String pkgName;
   private List<ElemInfo> elemList;
   private List<AltInfo> altList = new LinkedList<>();
   private List<String> tokenList = new LinkedList<>();
@@ -40,7 +40,7 @@ public class GenAnalyses extends DepthFirstAdapter
     {
       macros = new MacroExpander(
                  new InputStreamReader(
-                   getClass().getResourceAsStream("analyses.txt")));
+                   getClass().getResourceAsStream("analyses.txt"), StandardCharsets.UTF_8));
     }
     catch(IOException e)
     {
@@ -48,7 +48,6 @@ public class GenAnalyses extends DepthFirstAdapter
     }
 
     pkgDir = new File(ast_ids.astIds.pkgDir, "analysis");
-    pkgName = ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis";
 
     if(!pkgDir.exists())
     {
@@ -150,10 +149,9 @@ public class GenAnalyses extends DepthFirstAdapter
 
   public void createAnalysis()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "Analysis.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "Analysis.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "AnalysisHeader", new String[] {pkgName,
-                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node"});
+      macros.apply(file, "AnalysisHeader", new String[] {ast_ids.astIds.pkgNameDot});
 
       if(mainProduction != null)
       {
@@ -185,10 +183,9 @@ public class GenAnalyses extends DepthFirstAdapter
 
   public void createAnalysisAdapter()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "AnalysisAdapter.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "AnalysisAdapter.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "AnalysisAdapterHeader", new String[] {pkgName,
-                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node"});
+      macros.apply(file, "AnalysisAdapterHeader", new String[] {ast_ids.astIds.pkgNameDot});
 
       if(mainProduction != null)
       {
@@ -218,11 +215,9 @@ public class GenAnalyses extends DepthFirstAdapter
 
   public void createDepthFirstAdapter()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "DepthFirstAdapter.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "DepthFirstAdapter.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "DepthFirstAdapterHeader", new String[] {pkgName,
-                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node",
-                   mainProduction});
+      macros.apply(file, "DepthFirstAdapterHeader", new String[] {ast_ids.astIds.pkgNameDot, mainProduction});
 
       for(AltInfo info : altList)
       {
@@ -269,11 +264,9 @@ public class GenAnalyses extends DepthFirstAdapter
 
   public void createReversedDepthFirstAdapter()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "ReversedDepthFirstAdapter.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "ReversedDepthFirstAdapter.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "ReversedDepthFirstAdapterHeader", new String[] {pkgName,
-                   ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node",
-                   mainProduction});
+      macros.apply(file, "ReversedDepthFirstAdapterHeader", new String[] {ast_ids.astIds.pkgNameDot, mainProduction});
 
       for(AltInfo info : altList)
       {
diff --git a/src/main/java/org/sablecc/sablecc/GenLexer.java b/src/main/java/org/sablecc/sablecc/GenLexer.java
index da9b0ca0ff96c6893c8c11b147735f062ff7d073..03f2e07418149e0cb8520354d93427c675bce1be 100644
--- a/src/main/java/org/sablecc/sablecc/GenLexer.java
+++ b/src/main/java/org/sablecc/sablecc/GenLexer.java
@@ -12,9 +12,10 @@ import java.io.BufferedWriter;
 import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -30,7 +31,6 @@ public class GenLexer extends AnalysisAdapter
   private MacroExpander macros;
   private ResolveIds ids;
   private File pkgDir;
-  private String pkgName;
   private AcceptStates[] acceptStatesArray;
   private Transitions transitions;
 
@@ -42,7 +42,7 @@ public class GenLexer extends AnalysisAdapter
     {
       macros = new MacroExpander(
                  new InputStreamReader(
-                   getClass().getResourceAsStream("lexer.txt")));
+                   getClass().getResourceAsStream("lexer.txt"), StandardCharsets.UTF_8));
     }
     catch(IOException e)
     {
@@ -50,7 +50,6 @@ public class GenLexer extends AnalysisAdapter
     }
 
     pkgDir = new File(ids.pkgDir, "lexer");
-    pkgName = ids.pkgName.equals("") ? "lexer" : ids.pkgName + ".lexer";
 
     if(!pkgDir.exists())
     {
@@ -113,9 +112,9 @@ public class GenLexer extends AnalysisAdapter
 
   private void createLexerException()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "LexerException.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "LexerException.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "LexerException", new String[] {pkgName});
+      macros.apply(file, "LexerException", new String[] {ids.pkgNameDot});
     }
     catch(IOException e)
     {
@@ -126,7 +125,7 @@ public class GenLexer extends AnalysisAdapter
 
   private void createLexer()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "Lexer.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "Lexer.java").toPath(), StandardCharsets.UTF_8))
     {
       String startState = "INITIAL";
       if(ids.stateList.size() > 0)
@@ -134,9 +133,7 @@ public class GenLexer extends AnalysisAdapter
         startState = ids.stateList.getFirst();
       }
 
-      macros.apply(file, "LexerHeader", new String[] {pkgName,
-                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node",
-                   startState});
+      macros.apply(file, "LexerHeader", new String[] {ids.pkgNameDot, startState});
 
       for(ListIterator<String> i = ids.tokenList.listIterator(); i.hasNext();)
       {
@@ -289,18 +286,14 @@ public class GenLexer extends AnalysisAdapter
 
       if(ids.stateList.size() > 0)
       {
-        for(ListIterator<String> i = ids.stateList.listIterator(); i.hasNext();)
+        for (String s : ids.stateList)
         {
-          String s = i.next();
-
-          macros.apply(file, "LexerStateBody",
-                       new String[] {s, "" + i.previousIndex()});
+          macros.apply(file, "LexerStateBody", new String[] {s});
         }
       }
       else
       {
-        macros.apply(file, "LexerStateBody",
-                     new String[] {"INITIAL", "" + 0});
+        macros.apply(file, "LexerStateBody", new String[] {"INITIAL"});
       }
 
       macros.apply(file, "LexerStateTail");
diff --git a/src/main/java/org/sablecc/sablecc/GenParser.java b/src/main/java/org/sablecc/sablecc/GenParser.java
index a927be88d55818ec39027c90583d9f4bbf2c63d9..20592f25f0f079a03a58815281950c9aa3c77683 100644
--- a/src/main/java/org/sablecc/sablecc/GenParser.java
+++ b/src/main/java/org/sablecc/sablecc/GenParser.java
@@ -12,9 +12,10 @@ import java.io.BufferedWriter;
 import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Deque;
 import java.util.HashMap;
@@ -64,7 +65,6 @@ public class GenParser extends DepthFirstAdapter
   private ComputeSimpleTermPosition CTP;
 
   private File pkgDir;
-  private String pkgName;
   private boolean hasProductions;
   private String firstProductionName;
   private boolean processInlining;
@@ -108,7 +108,7 @@ public class GenParser extends DepthFirstAdapter
     {
       macros = new MacroExpander(
                  new InputStreamReader(
-                   getClass().getResourceAsStream("parser.txt")));
+                   getClass().getResourceAsStream("parser.txt"), StandardCharsets.UTF_8));
     }
     catch(IOException e)
     {
@@ -116,7 +116,6 @@ public class GenParser extends DepthFirstAdapter
     }
 
     pkgDir = new File(ids.pkgDir, "parser");
-    pkgName = ids.pkgName.equals("") ? "parser" : ids.pkgName + ".parser";
 
     if(!pkgDir.exists())
     {
@@ -368,16 +367,13 @@ public class GenParser extends DepthFirstAdapter
   //Parser.java Generation
   private void createParser()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "Parser.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "Parser.java").toPath(), StandardCharsets.UTF_8))
     {
       Symbol[] terminals = Symbol.terminals();
       Symbol[] nonterminals = Symbol.nonterminals();
       Production[] productions = Production.productions();
 
-      macros.apply(file, "ParserHeader", new String[] {pkgName,
-                   ids.pkgName.equals("") ? "lexer" : ids.pkgName + ".lexer",
-                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node",
-                   ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis"});
+      macros.apply(file, "ParserHeader", new String[] {ids.pkgNameDot});
 
       if(activateFilter && !grammarHasTransformations)
       {
@@ -731,13 +727,11 @@ public class GenParser extends DepthFirstAdapter
 
   private void createTokenIndex()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "TokenIndex.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "TokenIndex.java").toPath(), StandardCharsets.UTF_8))
     {
       Symbol[] terminals = Symbol.terminals();
 
-      macros.apply(file, "TokenIndexHeader", new String[] {pkgName,
-                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node",
-                   ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis"});
+      macros.apply(file, "TokenIndexHeader", new String[] {ids.pkgNameDot});
 
       for(int i = 0; i < (terminals.length - 2); i++)
       {
@@ -755,10 +749,9 @@ public class GenParser extends DepthFirstAdapter
 
   private void createParserException()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "ParserException.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "ParserException.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "ParserException", new String[] {pkgName,
-                   ids.pkgName.equals("") ? "node" : ids.pkgName + ".node"});
+      macros.apply(file, "ParserException", new String[] {ids.pkgNameDot});
     }
     catch(IOException e)
     {
@@ -769,9 +762,9 @@ public class GenParser extends DepthFirstAdapter
 
   private void createState()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "State.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "State.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "State", new String[] {pkgName});
+      macros.apply(file, "State", new String[] {ids.pkgNameDot});
     }
     catch(IOException e)
     {
diff --git a/src/main/java/org/sablecc/sablecc/GenProds.java b/src/main/java/org/sablecc/sablecc/GenProds.java
index a327e0a2ce7b0dadcd442a8582b506768c5ff1a8..aea041b29cf99fd7c825a6284be63219039d3d88 100644
--- a/src/main/java/org/sablecc/sablecc/GenProds.java
+++ b/src/main/java/org/sablecc/sablecc/GenProds.java
@@ -9,9 +9,10 @@ package org.sablecc.sablecc;
 
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 
 import org.sablecc.sablecc.analysis.DepthFirstAdapter;
 import org.sablecc.sablecc.node.AAstProd;
@@ -21,7 +22,6 @@ public class GenProds extends DepthFirstAdapter
   private MacroExpander macros;
   private ResolveAstIds ast_ids;
   private File pkgDir;
-  private String pkgName;
 
   public GenProds(ResolveAstIds ast_ids)
   {
@@ -31,7 +31,7 @@ public class GenProds extends DepthFirstAdapter
     {
       macros = new MacroExpander(
                  new InputStreamReader(
-                   getClass().getResourceAsStream("productions.txt")));
+                   getClass().getResourceAsStream("productions.txt"), StandardCharsets.UTF_8));
     }
     catch(IOException e)
     {
@@ -39,7 +39,6 @@ public class GenProds extends DepthFirstAdapter
     }
 
     pkgDir = new File(ast_ids.astIds.pkgDir, "node");
-    pkgName = ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node";
 
     if(!pkgDir.exists())
     {
@@ -60,9 +59,9 @@ public class GenProds extends DepthFirstAdapter
 
   private void createProduction(String name)
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, name + ".java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, name + ".java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "Production", new String[] {pkgName, name});
+      macros.apply(file, "Production", new String[] {ast_ids.astIds.pkgNameDot, name});
     }
     catch(IOException e)
     {
@@ -73,7 +72,7 @@ public class GenProds extends DepthFirstAdapter
 
   private void createAlternative(String name, String macro, String[] arg)
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, name + ".java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, name + ".java").toPath(), StandardCharsets.UTF_8))
     {
       macros.apply(file, macro, arg);
     }
diff --git a/src/main/java/org/sablecc/sablecc/GenTokens.java b/src/main/java/org/sablecc/sablecc/GenTokens.java
index f5abfaaa7e74183283ad3ae9e1885e00a97a536e..364f79d2606e8b3ce2e83a5f74b9918e89851acf 100644
--- a/src/main/java/org/sablecc/sablecc/GenTokens.java
+++ b/src/main/java/org/sablecc/sablecc/GenTokens.java
@@ -9,9 +9,10 @@ package org.sablecc.sablecc;
 
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.List;
 
 import org.sablecc.sablecc.analysis.DepthFirstAdapter;
@@ -22,7 +23,6 @@ public class GenTokens extends DepthFirstAdapter
   private MacroExpander macros;
   private ResolveIds ids;
   private File pkgDir;
-  private String pkgName;
 
   //    final GenTokens instance = this;
   String text;
@@ -35,7 +35,7 @@ public class GenTokens extends DepthFirstAdapter
     {
       macros = new MacroExpander(
                  new InputStreamReader(
-                   getClass().getResourceAsStream("tokens.txt")));
+                   getClass().getResourceAsStream("tokens.txt"), StandardCharsets.UTF_8));
     }
     catch(IOException e)
     {
@@ -43,7 +43,6 @@ public class GenTokens extends DepthFirstAdapter
     }
 
     pkgDir = new File(ids.pkgDir, "node");
-    pkgName = ids.pkgName.equals("") ? "node" : ids.pkgName + ".node";
 
     if(!pkgDir.exists())
     {
@@ -95,25 +94,24 @@ public class GenTokens extends DepthFirstAdapter
       }
     }
 
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, name + ".java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, name + ".java").toPath(), StandardCharsets.UTF_8))
     {
       if(text == null)
       {
         ids.fixedTokens.put(node, false);
 
-        macros.apply(file, "VariableTextToken", new String[] { pkgName,
-                     ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
-                     name});
+        macros.apply(file, "VariableTextToken", new String[] {ids.pkgNameDot, name});
       }
       else
       {
         ids.fixedTokens.put(node, true);
 
-        macros.apply(file, "FixedTextToken", new String[] { pkgName,
-                     ids.pkgName.equals("") ? "analysis" : ids.pkgName + ".analysis",
-                     name, processText(text)});
+        macros.apply(file, "FixedTextToken", new String[] {ids.pkgNameDot, name, processText(text)});
 
-        ids.errorNames.put(node, "'" + text + "'");
+        // Workaround to not output the characters '*/' into comments in the generated code.
+        if (!text.contains("*/")) {
+          ids.errorNames.put(node, "'" + text + "'");
+        }
       }
     }
     catch(IOException e)
diff --git a/src/main/java/org/sablecc/sablecc/GenUtils.java b/src/main/java/org/sablecc/sablecc/GenUtils.java
index 051ab0fccf9a18b90c52a94a82ebe9a7f841c07e..10eed4536850326d0c2ea22ecca92c5398b11c83 100644
--- a/src/main/java/org/sablecc/sablecc/GenUtils.java
+++ b/src/main/java/org/sablecc/sablecc/GenUtils.java
@@ -9,9 +9,10 @@ package org.sablecc.sablecc;
 
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 
 import org.sablecc.sablecc.analysis.DepthFirstAdapter;
 import org.sablecc.sablecc.node.AAstProd;
@@ -22,7 +23,6 @@ public class GenUtils extends DepthFirstAdapter
   private MacroExpander macros;
   private ResolveAstIds ast_ids;
   private File pkgDir;
-  private String pkgName;
   private String mainProduction;
 
   public GenUtils(ResolveAstIds ast_ids)
@@ -33,7 +33,7 @@ public class GenUtils extends DepthFirstAdapter
     {
       macros = new MacroExpander(
                  new InputStreamReader(
-                   getClass().getResourceAsStream("utils.txt")));
+                   getClass().getResourceAsStream("utils.txt"), StandardCharsets.UTF_8));
     }
     catch(IOException e)
     {
@@ -41,7 +41,6 @@ public class GenUtils extends DepthFirstAdapter
     }
 
     pkgDir = new File(ast_ids.astIds.pkgDir, "node");
-    pkgName = ast_ids.astIds.pkgName.equals("") ? "node" : ast_ids.astIds.pkgName + ".node";
 
     if(!pkgDir.exists())
     {
@@ -90,11 +89,9 @@ public class GenUtils extends DepthFirstAdapter
 
   public void createStart()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "Start.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "Start.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "Start", new String[] {pkgName,
-                   ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis",
-                   mainProduction, GenAlts.nodeName(mainProduction)});
+      macros.apply(file, "Start", new String[] {ast_ids.astIds.pkgNameDot, mainProduction, GenAlts.nodeName(mainProduction)});
     }
     catch(IOException e)
     {
@@ -105,10 +102,9 @@ public class GenUtils extends DepthFirstAdapter
 
   public void createEOF()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "EOF.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "EOF.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "EOF", new String[] {pkgName,
-                                              ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis"});
+      macros.apply(file, "EOF", new String[] {ast_ids.astIds.pkgNameDot});
     }
     catch(IOException e)
     {
@@ -119,10 +115,9 @@ public class GenUtils extends DepthFirstAdapter
 
   public void createNode()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "Node.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "Node.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "Node", new String[] {pkgName,
-                   ast_ids.astIds.pkgName.equals("") ? "analysis" : ast_ids.astIds.pkgName + ".analysis"});
+      macros.apply(file, "Node", new String[] {ast_ids.astIds.pkgNameDot});
     }
     catch(IOException e)
     {
@@ -133,9 +128,9 @@ public class GenUtils extends DepthFirstAdapter
 
   public void createToken()
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, "Token.java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, "Token.java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, "Token", new String[] {pkgName});
+      macros.apply(file, "Token", new String[] {ast_ids.astIds.pkgNameDot});
     }
     catch(IOException e)
     {
@@ -146,9 +141,9 @@ public class GenUtils extends DepthFirstAdapter
 
   public void create(String cls)
   {
-    try(BufferedWriter file = new BufferedWriter(new FileWriter(new File(pkgDir, cls + ".java"))))
+    try(BufferedWriter file = Files.newBufferedWriter(new File(pkgDir, cls + ".java").toPath(), StandardCharsets.UTF_8))
     {
-      macros.apply(file, cls, new String[] {pkgName});
+      macros.apply(file, cls, new String[] {ast_ids.astIds.pkgNameDot});
     }
     catch(IOException e)
     {
diff --git a/src/main/java/org/sablecc/sablecc/ResolveIds.java b/src/main/java/org/sablecc/sablecc/ResolveIds.java
index 27cc669d0488ebe74dfb267be19bc445166427a0..6b6c4d0e85518b6efe784971fd514612b8f221ed 100644
--- a/src/main/java/org/sablecc/sablecc/ResolveIds.java
+++ b/src/main/java/org/sablecc/sablecc/ResolveIds.java
@@ -46,6 +46,8 @@ public class ResolveIds extends DepthFirstAdapter
   public final LinkedList<String> stateList = new LinkedList<>();
   public File pkgDir;
   public String pkgName = "";
+  // pkgNameDot has a dot appended if non-empty.
+  public String pkgNameDot = "";
 
   private boolean processingStates;
   private boolean processingIgnTokens;
@@ -75,6 +77,8 @@ public class ResolveIds extends DepthFirstAdapter
         pkgDir = new File(pkgDir, temp[i].getText());
       }
 
+      pkgNameDot = pkgName + ".";
+
       if(!pkgDir.exists())
       {
         if(!pkgDir.mkdirs())
diff --git a/src/main/java/org/sablecc/sablecc/SableCC.java b/src/main/java/org/sablecc/sablecc/SableCC.java
index 2ed2bb3e4b9a89799401c4688217bc4d3f1f11b7..be66d8924e2b682897ad3c72e2e2fd6b5214631a 100644
--- a/src/main/java/org/sablecc/sablecc/SableCC.java
+++ b/src/main/java/org/sablecc/sablecc/SableCC.java
@@ -7,10 +7,12 @@
 
 package org.sablecc.sablecc;
 
+import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileReader;
 import java.io.IOException;
 import java.io.PushbackReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -186,13 +188,14 @@ public class SableCC {
     System.out.println("\n -- Generating parser for " + in.getName()
         + " in " + dir.getPath());
 
-    FileReader temp = new FileReader(in);
-
     // Build the AST
-    Start tree = new Parser(new Lexer(new PushbackReader(
-        temp = new FileReader(in), 1000))).parse();
-
-    temp.close();
+    Start tree;
+    try (
+      BufferedReader temp = Files.newBufferedReader(in.toPath(), StandardCharsets.UTF_8);
+      PushbackReader reader = new PushbackReader(temp, 1000);
+    ) {
+      tree = new Parser(new Lexer(reader)).parse();
+    }
 
     boolean hasTransformations = false;
 
diff --git a/src/main/java/org/sablecc/sablecc/analysis/Analysis.java b/src/main/java/org/sablecc/sablecc/analysis/Analysis.java
index 999e37aa76d901764bba0d5d048dbe255ea3fadd..85fdad18cd97a8c34a5bde4b63275e119e532ac4 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/Analysis.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/Analysis.java
@@ -6,38 +6,6 @@ import org.sablecc.sablecc.node.*;
 
 public interface Analysis extends Switch
 {
-    /**
-     * @param node the node for which to look up the associated object
-     * @return the corresponding object previously associated using {@link #setIn(Node, Object)}, or {@code null} if there is none
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    Object getIn(Node node);
-
-    /**
-     * @param node the node with which to associate the given object
-     * @param o the object to associate with the node
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    void setIn(Node node, Object o);
-
-    /**
-     * @param node the node for which to look up the associated object
-     * @return the corresponding object previously associated using {@link #setOut(Node, Object)}, or {@code null} if there is none
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    Object getOut(Node node);
-
-    /**
-     * @param node the node with which to associate the given object
-     * @param o the object to associate with the node
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    void setOut(Node node, Object o);
-
     void caseStart(Start node);
     void caseAGrammar(AGrammar node);
     void caseAHelpers(AHelpers node);
diff --git a/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
index c07b2600c60eb1a18f3fef46da7b244d42d8e74a..5dfa2cec56a25b4cbd219525f7e235f7811fe7dd 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/AnalysisAdapter.java
@@ -2,85 +2,10 @@
 
 package org.sablecc.sablecc.analysis;
 
-import java.util.*;
 import org.sablecc.sablecc.node.*;
 
 public class AnalysisAdapter implements Analysis
 {
-    /**
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    private Hashtable<Node,Object> in;
-
-    /**
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    private Hashtable<Node,Object> out;
-
-    @Deprecated
-    @Override
-    public Object getIn(Node node)
-    {
-        if(this.in == null)
-        {
-            return null;
-        }
-
-        return this.in.get(node);
-    }
-
-    @Deprecated
-    @Override
-    public void setIn(Node node, Object o)
-    {
-        if(this.in == null)
-        {
-            this.in = new Hashtable<Node,Object>(1);
-        }
-
-        if(o != null)
-        {
-            this.in.put(node, o);
-        }
-        else
-        {
-            this.in.remove(node);
-        }
-    }
-
-    @Deprecated
-    @Override
-    public Object getOut(Node node)
-    {
-        if(this.out == null)
-        {
-            return null;
-        }
-
-        return this.out.get(node);
-    }
-
-    @Deprecated
-    @Override
-    public void setOut(Node node, Object o)
-    {
-        if(this.out == null)
-        {
-            this.out = new Hashtable<Node,Object>(1);
-        }
-
-        if(o != null)
-        {
-            this.out.put(node, o);
-        }
-        else
-        {
-            this.out.remove(node);
-        }
-    }
-
     @Override
     public void caseStart(Start node)
     {
diff --git a/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
index b90d621221adefe97b7f67bfa492400699e354e2..7132e6efa4369f2ac32663be65aa9a6cdb3cbc79 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/DepthFirstAdapter.java
@@ -2,14 +2,13 @@
 
 package org.sablecc.sablecc.analysis;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.sablecc.sablecc.node.*;
 
 public class DepthFirstAdapter extends AnalysisAdapter
 {
-
-    final List<Void> dummy = new ArrayList<Void>();
-
     public void inStart(Start node)
     {
         defaultIn(node);
diff --git a/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java b/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
index 64c1d6f43dd3fce4bdd3294fc526ad9e9ccbcd38..3f75d98fdf099be198e5d7af5da0ce395527916f 100644
--- a/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
+++ b/src/main/java/org/sablecc/sablecc/analysis/ReversedDepthFirstAdapter.java
@@ -2,14 +2,14 @@
 
 package org.sablecc.sablecc.analysis;
 
-import java.util.*;
-import org.sablecc.sablecc.node.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
+import org.sablecc.sablecc.node.*;
 
 public class ReversedDepthFirstAdapter extends AnalysisAdapter
 {
-    final List<Void> dummy = new ArrayList<Void>();
-
     public void inStart(Start node)
     {
         defaultIn(node);
diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
index 3eafaec1931e12d2f44e3aae8263f8295de4a35c..a582d499010aec9ae53f0529e766388864304d1a 100644
--- a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
+++ b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
@@ -2,14 +2,22 @@
 
 package org.sablecc.sablecc.lexer;
 
-import java.io.*;
-import java.util.*;
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.PushbackReader;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+import de.hhu.stups.sablecc.patch.IToken;
+
 import org.sablecc.sablecc.node.*;
-import de.hhu.stups.sablecc.patch.*;
-import java.util.concurrent.LinkedBlockingQueue;
 
-@SuppressWarnings({"unused"})
-public class Lexer implements ITokenListContainer
+@SuppressWarnings({"deprecation", "unused"}) // ITokenListContainer is deprecated, but the generated lexer still implements it for compatibility
+public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
 {
     protected Token token;
     protected State state = State.NORMAL;
@@ -22,12 +30,17 @@ public class Lexer implements ITokenListContainer
     private final StringBuilder text = new StringBuilder();
 
     private List<IToken> tokenList;
-    private final Queue<IToken> nextList = new LinkedBlockingQueue<IToken>();
+    private final Queue<IToken> nextList = new LinkedList<IToken>();
 
     public Queue<IToken> getNextList() {
         return nextList;
     }
 
+    /**
+     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
+     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     */
+    @Deprecated
     @Override
     public List<IToken> getTokenList() {
         return tokenList;
@@ -37,7 +50,11 @@ public class Lexer implements ITokenListContainer
         token = t;
     }
 
-
+    /**
+     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
+     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     */
+    @Deprecated
     public void setTokenList(final List<IToken> list) {
         tokenList = list;
     }
@@ -101,8 +118,8 @@ public class Lexer implements ITokenListContainer
         int accept_pos = -1;
         int accept_line = -1;
 
-        int[][][] gotoTable = Lexer.gotoTable[this.state.id()];
-        int[] accept = Lexer.accept[this.state.id()];
+        int[][][] gotoTable = Lexer.gotoTable[this.state.ordinal()];
+        int[] accept = Lexer.accept[this.state.ordinal()];
         this.text.setLength(0);
 
         while(true)
@@ -203,7 +220,7 @@ public class Lexer implements ITokenListContainer
                             pushBack(accept_length);
                             this.pos = accept_pos;
                             this.line = accept_line;
-                            switch(state.id())
+                            switch(state.ordinal())
                             {
                                 case 1: state = State.PACKAGE; break;
                             }
@@ -217,7 +234,7 @@ public class Lexer implements ITokenListContainer
                             pushBack(accept_length);
                             this.pos = accept_pos;
                             this.line = accept_line;
-                            switch(state.id())
+                            switch(state.ordinal())
                             {
                                 case 0: state = State.PACKAGE; break;
                             }
@@ -371,7 +388,7 @@ public class Lexer implements ITokenListContainer
                             pushBack(accept_length);
                             this.pos = accept_pos;
                             this.line = accept_line;
-                            switch(state.id())
+                            switch(state.ordinal())
                             {
                                 case 0: state = State.NORMAL; break;
                                 case 1: state = State.NORMAL; break;
@@ -986,21 +1003,15 @@ public class Lexer implements ITokenListContainer
 
     };*/
 
-    public static class State
+    public enum State
     {
-        public final static State NORMAL = new State(0);
-        public final static State PACKAGE = new State(1);
-
-        private int id;
-
-        private State(int id)
-        {
-            this.id = id;
-        }
+        NORMAL,
+        PACKAGE,
+        ;
 
         public int id()
         {
-            return this.id;
+            return this.ordinal();
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 144ab37c8b6026ac8124a54fcd0c01b4488abd2c..46fa13efb215524e39975d042ef80890130c29c6 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AAlt extends PAlt
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 16c9d4d0bd2a81f4c7a9eb46321a683afe78222a..40ae9973af24d27c45cd43fc02484dba18b09bbf 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AAltTransform extends PAltTransform
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index c5002df4a52bc895fa0934205fe8c34aec79cafc..82a3c2876bc2907d96d2f6ffbdf1d0190e02adad 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AAst extends PAst
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index ade7c7e1ed01917d3f843d4dedb37d88c0a8b277..57f8d822fb9c402b9490579d65dc7194b95e2307 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AAstAlt extends PAstAlt
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index bf451c69cc0c9650809b694778c96d181ee0d73d..9548aa5c410d1b1c132f36901b7234623a328b9d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AAstProd extends PAstProd
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
index e2c2c290835a2f9a2063c212bfd8ffc0fcf1e239..270a06ccf7ec1b69314995cab75ce6f938004850 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ACharBasic extends PBasic
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharChar.java b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
index c843556274ff14ff8c5ed26eba4085bce641344a..0b11b64769f5fa9c142f2706d4b42d6130475707 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ACharChar extends PChar
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index a3c666d899b9eba07d7f60c3d1dd7c14f86aefa7..76b5d87780c0df49b870396a3c78d555b2416c69 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AConcat extends PConcat
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ADecChar.java b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
index 31c50336ad18ef60fe1ef63de05d70f27111b186..0778ae0ddededaffc90e221f3fb7e95999f2522a 100644
--- a/src/main/java/org/sablecc/sablecc/node/ADecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ADecChar extends PChar
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AElem.java b/src/main/java/org/sablecc/sablecc/node/AElem.java
index 70985fa2053b5bd3e69a3d48e2e7d94c07881e34..f961acc6ee47ccaf2b0f8321abaac9e5f086912a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/AElem.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AElem extends PElem
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index 1408be174f1495e9d50121985c3ab83e92401a2c..ef39aa3ef21844b05520fadbe17880fc8a2a9566 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AGrammar extends PGrammar
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
index 872f966d1c3f06975db23d335cc41d9ea212b2fa..93742b973d0c4212ec8f6ede8ef1bb440714c74a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AHelperDef extends PHelperDef
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index 5b5f96a2fc755b92da1c790d5ed37651689977a9..f083aeccd7c11cb2ccae6722e3a713eb739de4fa 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AHelpers extends PHelpers
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AHexChar.java b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
index 03913724395d8f7bee061d6a68c0bb2d8c8a0f8d..ea2c910d1d49ce0f9e927ca69e814ddf7c571c71 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AHexChar extends PChar
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
index 8ce3a09337bf32bc4de18b083f419640490b6f4b..2089831188cb12dc623730ec625934679b13fe73 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AIdBasic extends PBasic
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index 4e89102c1903fe8b3ccd83a88ae9a6d4ffdb3600..21caa3f72801410e9ea8f11c13f0e983c8c985aa 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AIgnTokens extends PIgnTokens
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
index dbd1b004938d96aba08682da410bcc1eb8e67293..aa6dcc6ab68b6d5744a714b694cef42c9855a0fb 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AIntervalSet extends PSet
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index 33ef29cd0c671b9d752bbd7bb36b46c79a776b9d..d87e033f3da0e89daaac6f78d70067f30dfa5ac8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AListTerm extends PTerm
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
index f83b25fd65f5487f1ec3b746148bafe2b0f221e5..d707ff0d2662fa874328e8dc072c94d7f50c1c31 100644
--- a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AMinusBinOp extends PBinOp
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index d90bcba479d7d8106b4f28e99c5968397378a3b1..0d3d8341d0b3d7c516dd49709a293b771b7f63a2 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ANewListTerm extends PListTerm
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index 5b15adbda881acec82476b5edbd11a88bbe8b15c..601f7923f6c48099cb2e481e81967218c5febde1 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ANewTerm extends PTerm
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
index 7054505a7a1ef9ae63394fc304f87c6f2ae981a6..dcd1f7f03016cf85edbe33a38932573e96e1328a 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ANullTerm extends PTerm
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
index d34ea9083b2320230c007b7ce205715ed0c1c8eb..0cd95937a665df7a27df7e5732e06737ada2b682 100644
--- a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AOperationSet extends PSet
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
index 37600cb7b4a975622dde5b3c3a7a6bc09daf3c9c..653ce61752c9e7dc3b91309ea7d3b7e1a9eba008 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class APlusBinOp extends PBinOp
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
index d31ac09b57b26ae668c4f218bc75b23ef6061ec5..c18ef1bf8d4d78a3a2446c86fa48518a6df6995a 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class APlusUnOp extends PUnOp
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index d058034bd0aebeceeaef06d86c224e16a49bb50f..ffa7289bfcd677de1924216fcfefd6814d41f8aa 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AProd extends PProd
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AProdName.java b/src/main/java/org/sablecc/sablecc/node/AProdName.java
index 48d5ed27d687398584365e3eaec51a60f3897e83..f5be37eb0fc230b8a7f2e8ea97d6e1cab1659f59 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProdName.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AProdName extends PProdName
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
index df84feb26a50114481a2831c23ce5703db629ebf..cccd16d36c56e44cec0f3b2f4e1d0c89f5ed859d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AProductionSpecifier extends PSpecifier
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index d5078d560f1fbbed861ba7fcd3a378bd2cb9f7db..f95ec5a099e09a9313a694432b1cc77957d6ccdf 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AProductions extends PProductions
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
index da78e8791a964e97e6b0ad7f2a4b67503a0d40ed..4eb1cc4b29b308c0134b3ecba3fbf68cbda994b0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AQMarkUnOp extends PUnOp
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index e9a9eedb3c25e100bf69f23d6e5147f1be40a3d8..ad35d8b27432e4a8df7c469cbf57c813aa1c6878 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ARegExp extends PRegExp
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
index 1c29eec74ef24927e70082fbd0062f8fff48b504..8169e64fb913c1eddd618056d78d2c40d5e621c6 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ARegExpBasic extends PBasic
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
index 9c26ab094894d9991f42894ccab765ae515d4d50..10040dd0a0f43b69962f15b84ca873de2ba22bfb 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ASetBasic extends PBasic
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
index 7821735cd82e0ac2cfd98073959ea2448ded3e47..2efef462828b5c08aeb359edd1b8b4555e2a1563 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ASimpleListTerm extends PListTerm
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
index 693bea1fb73a5b757e3d08436fc9d46d14b8d8d3..1138d998a1cff02691ef3bd0ef93db955fa7a55e 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ASimpleTerm extends PTerm
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
index 65146a48504d8ed4393b1648d5b9e97ca9006b22..9e6fa0d45701ebb7a8df44bd79112912bf7401f0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AStarUnOp extends PUnOp
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index f24a890d5701946bb38c36329b6e38697b9b8e95..7af91334ade49f4cd65670189bc7ae1e59bbc3e5 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AStateList extends PStateList
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
index b07fbfcc87000a2dd5447b1fa408324ac0189454..748b9dbc23cffba22b88fbe63e2fc9c1ccfc72e0 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AStateListTail extends PStateListTail
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index 1c8e4eec6b5720a5b3ed770eda397c1f1a9e91ab..a191372642bbec5fbb06e9ff08165297dc33dddf 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AStates extends PStates
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
index 79963c2303490abda7f75c28d4befd4afe39b524..c52baeb47e15b7888ef5efd7a7a61330207613b1 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AStringBasic extends PBasic
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
index b2e423d3a805e98c22fa34324f1f0d8f73de1d21..21aa248d38b76ca0e804744122f3fd86e39bee7f 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ATokenDef extends PTokenDef
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
index 596e939289aa23f3a6dda76391f0258452049e66..4cabc05889acd10273cb4c0b519cf452a48b820d 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ATokenSpecifier extends PSpecifier
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index 2ad3db72495dcb10f541587b3d10da2ea21f342b..d128831b37934f484e107628fdbaa0dee4726267 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -2,9 +2,11 @@
 
 package org.sablecc.sablecc.node;
 
-import java.util.*;
-import org.sablecc.sablecc.analysis.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
 
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ATokens extends PTokens
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/ATransition.java b/src/main/java/org/sablecc/sablecc/node/ATransition.java
index e0c63282c9b02a058fac2f6e4cb6d636133d5e8c..efc2ecb8a722002ea320ef0a7b9e50dca51167cf 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATransition.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class ATransition extends PTransition
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/AUnExp.java b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
index ea2d1e39625a98a4d8b7c12bac7784127e3caf6e..30185f0ab743acb499845cb39bb5e8873b78e709 100644
--- a/src/main/java/org/sablecc/sablecc/node/AUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class AUnExp extends PUnExp
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/EOF.java b/src/main/java/org/sablecc/sablecc/node/EOF.java
index 5097f39cd8213c78aa0567870c15183e3ece638d..8d7e017e119d18af04ebeca9e6e6f910dcd7a282 100644
--- a/src/main/java/org/sablecc/sablecc/node/EOF.java
+++ b/src/main/java/org/sablecc/sablecc/node/EOF.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class EOF extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/Start.java b/src/main/java/org/sablecc/sablecc/node/Start.java
index 0988c84f035f06138fea1ccbdf1097b123aa2a56..f9e230a62e8a6a7916ef4290b0f8aae8341c03bd 100644
--- a/src/main/java/org/sablecc/sablecc/node/Start.java
+++ b/src/main/java/org/sablecc/sablecc/node/Start.java
@@ -2,7 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class Start extends Node
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TAbstract.java b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
index 8fc5a72b365fe61494c9fdfaab219458755ee22a..ba9a91097dae626ad254bf4d4e5d9b7f11885fa6 100644
--- a/src/main/java/org/sablecc/sablecc/node/TAbstract.java
+++ b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TAbstract extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TArrow.java b/src/main/java/org/sablecc/sablecc/node/TArrow.java
index ac885099e845cb6a413aa715be5fddeb0d197760..9a2221108eff3e2ff7d6c4408d976f51f442fdb5 100644
--- a/src/main/java/org/sablecc/sablecc/node/TArrow.java
+++ b/src/main/java/org/sablecc/sablecc/node/TArrow.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TArrow extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TBar.java b/src/main/java/org/sablecc/sablecc/node/TBar.java
index 1fd5831e2d3da63e9bf44dcd4ba952d3689c2a72..36d967f0f6ad392ed88026d04571a2e369b8b088 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TBar extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TBlank.java b/src/main/java/org/sablecc/sablecc/node/TBlank.java
index 70b8ecf905be3f22432f256b9af5730ca4ccaa68..de51cb91f026c3706c08738e36dad023cca4f31c 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBlank.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBlank.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TBlank extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TChar.java b/src/main/java/org/sablecc/sablecc/node/TChar.java
index 6f70e04472fec0daf5c881dfa00395cd23804314..aecb775ca04dbf1cb0fa709c0c80c37adbdd289e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TChar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TChar extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TColon.java b/src/main/java/org/sablecc/sablecc/node/TColon.java
index ac8d6aca2f401d5c5e0a42c9a6a6da557c3ef032..76e6ae69214ea2345d1683deb945ac071769d75f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TColon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TColon.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TColon extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TComma.java b/src/main/java/org/sablecc/sablecc/node/TComma.java
index 0905a298f6958cdbdc0543475ec90515512bd714..485b422a4c9a088306c527ebaab3286e13c1a010 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComma.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComma.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TComma extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TComment.java b/src/main/java/org/sablecc/sablecc/node/TComment.java
index 67275750b6300598089f24bbe9c1909553c9ea5e..9f9f1a52e64a25d5f27e6d676d6c53908a02f3eb 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComment.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComment.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TComment extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TDDot.java b/src/main/java/org/sablecc/sablecc/node/TDDot.java
index d650fed9dc243d1ea193c31edf1365beac8a9b07..0c2dd1f54cec3ca9429da62499093792f12fcec5 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDDot.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TDDot extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TDecChar.java b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
index 11fef1ec15e9712027b9143d86223cd97607c04e..22104e3f91115ac6cb8f78933abdab1619c149dd 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TDecChar extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TDot.java b/src/main/java/org/sablecc/sablecc/node/TDot.java
index 8606648faa48a431d52e2e793d5631387c4c1598..394e43fad398c48a2557843d1629672b62febd73 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDot.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TDot extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TEqual.java b/src/main/java/org/sablecc/sablecc/node/TEqual.java
index fc57280efbb718e118e6691530e99a55ffc2b7ec..c5b4c7c7ebfacb1cfb3fe71b159263b20eb0ad58 100644
--- a/src/main/java/org/sablecc/sablecc/node/TEqual.java
+++ b/src/main/java/org/sablecc/sablecc/node/TEqual.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TEqual extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/THelpers.java b/src/main/java/org/sablecc/sablecc/node/THelpers.java
index 01bf376ef0f2930fe8b085705f1ce94d35727616..27b296643b6d1d6a265ce6c282a7eaf899f833e5 100644
--- a/src/main/java/org/sablecc/sablecc/node/THelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/THelpers.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class THelpers extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/THexChar.java b/src/main/java/org/sablecc/sablecc/node/THexChar.java
index be72cbca158910c92060f95f0de855c5e90b3acd..2b09dc0d88ab19560397df0b41dbfab78b8c5ccc 100644
--- a/src/main/java/org/sablecc/sablecc/node/THexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/THexChar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class THexChar extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TId.java b/src/main/java/org/sablecc/sablecc/node/TId.java
index 6ecb2e6e46e54fc9c703cfcbb94a1c7964ba833f..4323e68cb24f7454b0efae7c78019c850a5a2ea7 100644
--- a/src/main/java/org/sablecc/sablecc/node/TId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TId.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TId extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TIgnored.java b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
index 872e211f8f7b3c84889f2e1d6ded01dc450ac17c..3512dee9b0c0362c7c73071d6776b4aa7d20b318 100644
--- a/src/main/java/org/sablecc/sablecc/node/TIgnored.java
+++ b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TIgnored extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBkt.java b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
index 18e858af26c5285283cc3358a11b549c22382061..8e5a83766b396eb6532f5fc8d0f6f8a0c97fb9b2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TLBkt extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBrace.java b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
index ce2f4d2fdfc4b4cae4a6e5fcb21b8962a9405f1a..a3dcb1575de2416c633b7d8db73928ab2aa42c47 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TLBrace extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TLPar.java b/src/main/java/org/sablecc/sablecc/node/TLPar.java
index 411908f7500df45e288ca932660e9babc73570fe..8ba1e87a8b3fa02e5c843ad25c5ce11c91ab1b14 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLPar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TLPar extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TMinus.java b/src/main/java/org/sablecc/sablecc/node/TMinus.java
index 1894edab789708133f693902cf61ad598781a33b..044d65cb72357e26aff5acb55e533c398e16b61e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TMinus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TMinus.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TMinus extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TNew.java b/src/main/java/org/sablecc/sablecc/node/TNew.java
index 445cc6fc691ccee972228200d71c517e6dcf6bfa..fcbcd3051c396bbedb10d79dcaeeba73e9f77c2b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNew.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNew.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TNew extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TNull.java b/src/main/java/org/sablecc/sablecc/node/TNull.java
index c41eea7f545d26d90ae0c3dd56f0123d6a6ab649..47800bb7583b204c45f4d5bca5239993d1678724 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNull.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNull.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TNull extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TPackage.java b/src/main/java/org/sablecc/sablecc/node/TPackage.java
index 9d0dce2619f3974934ab072eaa0009352343fe14..b2854d6dd99d1a3fc4ca87afcb3917aa14a52a5e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPackage.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPackage.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TPackage extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TPkgId.java b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
index 4a35d8f5f549c3c4a32bfae3cfc7d07d7a68ec75..63fd17a18c15cba74a84fd15acf5fb0993984f36 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPkgId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TPkgId extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TPlus.java b/src/main/java/org/sablecc/sablecc/node/TPlus.java
index 72b8346a4e57954405b13894183e46b6e3d165d0..5098ea0560ef1e54035439e42cf132fcb4afcc76 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPlus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPlus.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TPlus extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
index f392e9651087b846862ce8c2971a39af374a1f54..35a585fa6be8e2e87fc5f860682ba4b287f3b1ef 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TProductionSpecifier extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductions.java b/src/main/java/org/sablecc/sablecc/node/TProductions.java
index 0420f850b56cab9cf6fbe7c60b7213805ac971d2..7f402c305d92a37de0e92f4eabe7fb87c7626215 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductions.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TProductions extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TQMark.java b/src/main/java/org/sablecc/sablecc/node/TQMark.java
index c7db1cc7f75e7a8ec826622387d745d7b9e7f913..aebf492424c824f49c0e2c0d80dc133174d7d1e1 100644
--- a/src/main/java/org/sablecc/sablecc/node/TQMark.java
+++ b/src/main/java/org/sablecc/sablecc/node/TQMark.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TQMark extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBkt.java b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
index 63f0c0e361bab2e54db2dbcdabff0bfa0902d6dc..30552da69e821b2614bd4c7e1ca175c4aeac9f2e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TRBkt extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBrace.java b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
index e90c27d6dee70dd075ca7844d602431aee26263d..04be2a1ce6914e3e527354e4998b865d82334a22 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TRBrace extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TRPar.java b/src/main/java/org/sablecc/sablecc/node/TRPar.java
index 0e29764edb7c57a09311e3f852f04f61f90baac9..c797774a6b97505a112fcae761b2c370b85d0253 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRPar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TRPar extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
index f8cfe4bad16641eb598b9d4752a7785aa8dcdfcf..144ab07845bd29b7997b497c862c3b5eaecfa03f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TSemicolon extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TSlash.java b/src/main/java/org/sablecc/sablecc/node/TSlash.java
index a4ff8b0149081b01b05dd237c388b815714cb473..6b2fd73cabe1766d0ed39edc1709bf805171707e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSlash.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSlash.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TSlash extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TStar.java b/src/main/java/org/sablecc/sablecc/node/TStar.java
index fc3d36be16a1aef6c4945072d9e2ebebdcc31832..c6835917372b09655346de4ac99dcb25049a9e9a 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStar.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TStar extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TStates.java b/src/main/java/org/sablecc/sablecc/node/TStates.java
index 4ae149afc9bf39a254172a291a6e875d03f06c16..45a75a7d67ae34613f9fef0e7097ae668e90b4b2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStates.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TStates extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TString.java b/src/main/java/org/sablecc/sablecc/node/TString.java
index 74779c4e44efefd91718cf0712817f334f138fa0..452162ec67d17fcc5919c4dcf653914157854a8f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TString.java
+++ b/src/main/java/org/sablecc/sablecc/node/TString.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TString extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TSyntax.java b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
index 64e466c6da6b7cc22606f8df895a75d61e729e0e..4e7340f7cc74d3296083ecbf6b18d32ed6c93df2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSyntax.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TSyntax extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
index 96a1eaa692c628fbc545cb4a377a7554ee2d1850..b37b101e402c4fa9ab8c59732cbdebfbf3d63945 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TTokenSpecifier extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokens.java b/src/main/java/org/sablecc/sablecc/node/TTokens.java
index 977178fd29dbccfdc151d6b09f6c0f07378e2660..fac6c7a7fa5c7d2d5aa8fe141bfe7efc54438817 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokens.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TTokens extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/TTree.java b/src/main/java/org/sablecc/sablecc/node/TTree.java
index f90670bac79ab701591ca9deb239ed1fee8415e2..91100d31f153e753b65ce43dc2265debaae123a4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTree.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTree.java
@@ -2,8 +2,7 @@
 
 package org.sablecc.sablecc.node;
 
-import org.sablecc.sablecc.analysis.*;
-
+import org.sablecc.sablecc.analysis.Analysis;
 
 public final class TTree extends Token
 {
diff --git a/src/main/java/org/sablecc/sablecc/node/Token.java b/src/main/java/org/sablecc/sablecc/node/Token.java
index bc0376a9cfbf59aabfc228576aa2befa4d6f9914..628077f9e1f2c706c0bbed22a466a799d2ed5686 100644
--- a/src/main/java/org/sablecc/sablecc/node/Token.java
+++ b/src/main/java/org/sablecc/sablecc/node/Token.java
@@ -5,7 +5,6 @@ package org.sablecc.sablecc.node;
 import de.hhu.stups.sablecc.patch.IToken;
 import de.hhu.stups.sablecc.patch.SourcePosition;
 
-
 public abstract class Token extends Node implements IToken
 {
     private String text;
diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index c9535dfa6f49dd99abe9764e6e84e6094d3f2a5a..992afd4ecfdc014ed141f4c19f41e8e0aa3d1f0d 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -2,19 +2,26 @@
 
 package org.sablecc.sablecc.parser;
 
-import org.sablecc.sablecc.lexer.*;
-import org.sablecc.sablecc.node.*;
-import org.sablecc.sablecc.analysis.*;
-import java.util.*;
-import de.hhu.stups.sablecc.patch.*;
-
-
 import java.io.DataInputStream;
 import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import de.hhu.stups.sablecc.patch.IParser;
+import de.hhu.stups.sablecc.patch.IToken;
+import de.hhu.stups.sablecc.patch.PositionedNode;
+
+import org.sablecc.sablecc.lexer.Lexer;
+import org.sablecc.sablecc.lexer.LexerException;
+import org.sablecc.sablecc.node.*;
 
-@SuppressWarnings({"rawtypes","unchecked","unused"})
+@SuppressWarnings({"deprecation", "rawtypes", "unchecked", "unused"}) // getMapping() is deprecated, but the generated parser still populates it for compatibility
 public class Parser implements IParser
 {
     protected List<Object> nodeList;
@@ -37,10 +44,15 @@ public class Parser implements IParser
         this.lexer = lexer;
     }
 
-
-    private Map<PositionedNode, SourcecodeRange> mapping = new HashMap<PositionedNode, SourcecodeRange>();
+    @Deprecated
+    private Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> mapping = new HashMap<>();
+    /**
+     * @deprecated All generated token classes store their own position info.
+     *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
+     */
+    @Deprecated
     @Override
-    public Map<PositionedNode, SourcecodeRange> getMapping() { return this.mapping; }
+    public Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> getMapping() { return this.mapping; }
 
     private void checkResult(Object elementToCheck, List<Object> beginNodeList, List<Object> endNodeList) {
         if (elementToCheck instanceof List<?>) {
@@ -79,7 +91,7 @@ public class Parser implements IParser
             PositionedNode endNode = findEndNode(endNodeList);
             int end = findEndPos(endNode);
             if (end == -1) end = begin;
-            final SourcecodeRange range = new SourcecodeRange(begin, end);
+            final de.hhu.stups.sablecc.patch.SourcecodeRange range = new de.hhu.stups.sablecc.patch.SourcecodeRange(begin, end);
 
             this.getMapping().put(node, range);
 
@@ -126,7 +138,7 @@ public class Parser implements IParser
             return findIndex((IToken) node);
         }
 
-        final SourcecodeRange item = this.getMapping().get(node);
+        final de.hhu.stups.sablecc.patch.SourcecodeRange item = this.getMapping().get(node);
         if (item == null) {
             return -1;
         }
@@ -145,16 +157,6 @@ public class Parser implements IParser
         return -1;
     }
 
-    /**
-     * @param productionRuleAsString internal name of the production rule in question
-     * @return {@code false} if creation of a new list should be skipped, {@code true} for default behavior
-     * @deprecated Overriding this method no longer has any effect. This optimization is now applied automatically iff it is safe.
-     */
-    @Deprecated
-    protected boolean addElementsFromListToNewList(String productionRuleAsString) {
-        return true;
-    }
-
     private void push(int numstate, List<Object> listNode) throws ParserException, LexerException, IOException
     {
         this.nodeList = listNode;
diff --git a/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java b/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java
index 1876b21bd095f7f27fb0405c5c3efcb5a931ffa3..37018e91c4a005878bfef1e20be1bb24de9dfd76 100644
--- a/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java
+++ b/src/main/java/org/sablecc/sablecc/parser/TokenIndex.java
@@ -2,8 +2,8 @@
 
 package org.sablecc.sablecc.parser;
 
+import org.sablecc.sablecc.analysis.AnalysisAdapter;
 import org.sablecc.sablecc.node.*;
-import org.sablecc.sablecc.analysis.*;
 
 class TokenIndex extends AnalysisAdapter
 {
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index eb1569cd445760238f281c1b10430881090760ad..e5cd53d8497334fc0007e806b445a7ea5cf89158 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -8,19 +8,21 @@
 Macro:AlternativeHeader1
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
 
 $
 
 Macro:AlternativeHeaderList
-import java.util.*;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
 
 $
 
 Macro:AlternativeHeader2
-import $0$.*;
-
+import $0$analysis.Analysis;
 
 public final class $1$ extends $2$
 {
diff --git a/src/main/resources/org/sablecc/sablecc/analyses.txt b/src/main/resources/org/sablecc/sablecc/analyses.txt
index 4a316079af302c480ee5a8f21a58d2a4215dfb89..47b3d044d6006f8edbd4f73cb9ffc89daa4d06b8 100644
--- a/src/main/resources/org/sablecc/sablecc/analyses.txt
+++ b/src/main/resources/org/sablecc/sablecc/analyses.txt
@@ -8,44 +8,12 @@
 Macro:AnalysisHeader
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$analysis;
 
-import $1$.*;
+import $0$node.*;
 
 public interface Analysis extends Switch
 {
-    /**
-     * @param node the node for which to look up the associated object
-     * @return the corresponding object previously associated using {@link #setIn(Node, Object)}, or {@code null} if there is none
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    Object getIn(Node node);
-
-    /**
-     * @param node the node with which to associate the given object
-     * @param o the object to associate with the node
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    void setIn(Node node, Object o);
-
-    /**
-     * @param node the node for which to look up the associated object
-     * @return the corresponding object previously associated using {@link #setOut(Node, Object)}, or {@code null} if there is none
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    Object getOut(Node node);
-
-    /**
-     * @param node the node with which to associate the given object
-     * @param o the object to associate with the node
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    void setOut(Node node, Object o);
-
 
 $
 Macro:AnalysisStart
@@ -67,87 +35,12 @@ $
 Macro:AnalysisAdapterHeader
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$analysis;
 
-import java.util.*;
-import $1$.*;
+import $0$node.*;
 
 public class AnalysisAdapter implements Analysis
 {
-    /**
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    private Hashtable<Node,Object> in;
-
-    /**
-     * @deprecated If you need a map field, declare it yourself.
-     */
-    @Deprecated
-    private Hashtable<Node,Object> out;
-
-    @Deprecated
-    @Override
-    public Object getIn(Node node)
-    {
-        if(this.in == null)
-        {
-            return null;
-        }
-
-        return this.in.get(node);
-    }
-
-    @Deprecated
-    @Override
-    public void setIn(Node node, Object o)
-    {
-        if(this.in == null)
-        {
-            this.in = new Hashtable<Node,Object>(1);
-        }
-
-        if(o != null)
-        {
-            this.in.put(node, o);
-        }
-        else
-        {
-            this.in.remove(node);
-        }
-    }
-
-    @Deprecated
-    @Override
-    public Object getOut(Node node)
-    {
-        if(this.out == null)
-        {
-            return null;
-        }
-
-        return this.out.get(node);
-    }
-
-    @Deprecated
-    @Override
-    public void setOut(Node node, Object o)
-    {
-        if(this.out == null)
-        {
-            this.out = new Hashtable<Node,Object>(1);
-        }
-
-        if(o != null)
-        {
-            this.out.put(node, o);
-        }
-        else
-        {
-            this.out.remove(node);
-        }
-    }
-
 $
 
 Macro:AnalysisAdapterStart
@@ -189,16 +82,15 @@ $
 Macro:DepthFirstAdapterHeader
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$analysis;
+
+import java.util.ArrayList;
+import java.util.List;
 
-import java.util.*;
-import $1$.*;
+import $0$node.*;
 
 public class DepthFirstAdapter extends AnalysisAdapter
 {
-
-    final List<Void> dummy = new ArrayList<Void>();
-
     public void inStart(Start node)
     {
         defaultIn(node);
@@ -223,7 +115,7 @@ public class DepthFirstAdapter extends AnalysisAdapter
     public void caseStart(Start node)
     {
         inStart(node);
-        node.get$2$().apply(this);
+        node.get$1$().apply(this);
         node.getEOF().apply(this);
         outStart(node);
     }
@@ -233,16 +125,16 @@ $
 Macro:ReversedDepthFirstAdapterHeader
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$analysis;
 
-import java.util.*;
-import $1$.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
+import $0$node.*;
 
 public class ReversedDepthFirstAdapter extends AnalysisAdapter
 {
-    final List<Void> dummy = new ArrayList<Void>();
-
     public void inStart(Start node)
     {
         defaultIn(node);
@@ -268,7 +160,7 @@ public class ReversedDepthFirstAdapter extends AnalysisAdapter
     {
         inStart(node);
         node.getEOF().apply(this);
-        node.get$2$().apply(this);
+        node.get$1$().apply(this);
         outStart(node);
     }
 
diff --git a/src/main/resources/org/sablecc/sablecc/lexer.txt b/src/main/resources/org/sablecc/sablecc/lexer.txt
index f9ccfb2dc96c980fd734deab2f20a2373e584280..f129be40152c9ae2562978e2e5d07a882943e241 100644
--- a/src/main/resources/org/sablecc/sablecc/lexer.txt
+++ b/src/main/resources/org/sablecc/sablecc/lexer.txt
@@ -8,7 +8,7 @@
 Macro:LexerException
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$lexer;
 
 @SuppressWarnings({"serial"})
 public class LexerException extends Exception
@@ -24,19 +24,27 @@ $
 Macro:LexerHeader
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$lexer;
 
-import java.io.*;
-import java.util.*;
-import $1$.*;
-import de.hhu.stups.sablecc.patch.*;
-import java.util.concurrent.LinkedBlockingQueue;
+import java.io.BufferedInputStream;
+import java.io.DataInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.PushbackReader;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
 
-@SuppressWarnings({"unused"})
-public class Lexer implements ITokenListContainer
+import de.hhu.stups.sablecc.patch.IToken;
+
+import $0$node.*;
+
+@SuppressWarnings({"deprecation", "unused"}) // ITokenListContainer is deprecated, but the generated lexer still implements it for compatibility
+public class Lexer implements de.hhu.stups.sablecc.patch.ITokenListContainer
 {
     protected Token token;
-    protected State state = State.$2$;
+    protected State state = State.$1$;
 
     private PushbackReader in;
     protected int line;
@@ -46,12 +54,17 @@ public class Lexer implements ITokenListContainer
     private final StringBuilder text = new StringBuilder();
 
     private List<IToken> tokenList;
-    private final Queue<IToken> nextList = new LinkedBlockingQueue<IToken>();
+    private final Queue<IToken> nextList = new LinkedList<IToken>();
 
     public Queue<IToken> getNextList() {
         return nextList;
     }
 
+    /**
+     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
+     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     */
+    @Deprecated
     @Override
     public List<IToken> getTokenList() {
         return tokenList;
@@ -61,7 +74,11 @@ public class Lexer implements ITokenListContainer
         token = t;
     }
 
-
+    /**
+     * @deprecated In the future, the generated lexers will not store all tokens anymore, because this leads to significant memory usage for large inputs.
+     *     If you really need this list, please create it yourself, using a custom lexer subclass if necessary.
+     */
+    @Deprecated
     public void setTokenList(final List<IToken> list) {
         tokenList = list;
     }
@@ -125,8 +142,8 @@ public class Lexer implements ITokenListContainer
         int accept_pos = -1;
         int accept_line = -1;
 
-        int[][][] gotoTable = Lexer.gotoTable[this.state.id()];
-        int[] accept = Lexer.accept[this.state.id()];
+        int[][][] gotoTable = Lexer.gotoTable[this.state.ordinal()];
+        int[] accept = Lexer.accept[this.state.ordinal()];
         this.text.setLength(0);
 
         while(true)
@@ -247,7 +264,7 @@ Macro:LexerFixedToken
 $
 
 Macro:TokenSwitchHeader
-                            switch(state.id())
+                            switch(state.ordinal())
                             {
 
 $
@@ -373,28 +390,22 @@ Macro:LexerAcceptTail
 $
 
 Macro:LexerStateHeader
-    public static class State
+    public enum State
     {
 
 $
 
 Macro:LexerStateBody
-        public final static State $0$ = new State($1$);
+        $0$,
 
 $
 
 Macro:LexerStateTail
-
-        private int id;
-
-        private State(int id)
-        {
-            this.id = id;
-        }
+        ;
 
         public int id()
         {
-            return this.id;
+            return this.ordinal();
         }
     }
 
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index e24642dd9c693de1b61f505c08586fdaba81ff72..302d4d88448d65f0179d1bcf53bac5b21df2674d 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -8,21 +8,28 @@
 Macro:ParserHeader
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
-
-import $1$.*;
-import $2$.*;
-import $3$.*;
-import java.util.*;
-import de.hhu.stups.sablecc.patch.*;
-
+package $0$parser;
 
 import java.io.DataInputStream;
 import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import de.hhu.stups.sablecc.patch.IParser;
+import de.hhu.stups.sablecc.patch.IToken;
+import de.hhu.stups.sablecc.patch.PositionedNode;
 
-@SuppressWarnings({"rawtypes","unchecked","unused"})
+import $0$lexer.Lexer;
+import $0$lexer.LexerException;
+import $0$node.*;
+
+@SuppressWarnings({"deprecation", "rawtypes", "unchecked", "unused"}) // getMapping() is deprecated, but the generated parser still populates it for compatibility
 public class Parser implements IParser
 {
     protected List<Object> nodeList;
@@ -45,10 +52,15 @@ public class Parser implements IParser
         this.lexer = lexer;
     }
 
-
-    private Map<PositionedNode, SourcecodeRange> mapping = new HashMap<PositionedNode, SourcecodeRange>();
+    @Deprecated
+    private Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> mapping = new HashMap<>();
+    /**
+     * @deprecated All generated token classes store their own position info.
+     *     Use the {@link PositionedNode} or {@link IToken} APIs to access the positions stored in the tokens.
+     */
+    @Deprecated
     @Override
-    public Map<PositionedNode, SourcecodeRange> getMapping() { return this.mapping; }
+    public Map<PositionedNode, de.hhu.stups.sablecc.patch.SourcecodeRange> getMapping() { return this.mapping; }
 
     private void checkResult(Object elementToCheck, List<Object> beginNodeList, List<Object> endNodeList) {
         if (elementToCheck instanceof List<?>) {
@@ -87,7 +99,7 @@ public class Parser implements IParser
             PositionedNode endNode = findEndNode(endNodeList);
             int end = findEndPos(endNode);
             if (end == -1) end = begin;
-            final SourcecodeRange range = new SourcecodeRange(begin, end);
+            final de.hhu.stups.sablecc.patch.SourcecodeRange range = new de.hhu.stups.sablecc.patch.SourcecodeRange(begin, end);
 
             this.getMapping().put(node, range);
 
@@ -134,7 +146,7 @@ public class Parser implements IParser
             return findIndex((IToken) node);
         }
 
-        final SourcecodeRange item = this.getMapping().get(node);
+        final de.hhu.stups.sablecc.patch.SourcecodeRange item = this.getMapping().get(node);
         if (item == null) {
             return -1;
         }
@@ -153,16 +165,6 @@ public class Parser implements IParser
         return -1;
     }
 
-    /**
-     * @param productionRuleAsString internal name of the production rule in question
-     * @return {@code false} if creation of a new list should be skipped, {@code true} for default behavior
-     * @deprecated Overriding this method no longer has any effect. This optimization is now applied automatically iff it is safe.
-     */
-    @Deprecated
-    protected boolean addElementsFromListToNewList(String productionRuleAsString) {
-        return true;
-    }
-
 $
 
 Macro:ParserInliningPushHeader
@@ -583,10 +585,10 @@ $
 Macro:TokenIndexHeader
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$parser;
 
-import $1$.*;
-import $2$.*;
+import $0$analysis.AnalysisAdapter;
+import $0$node.*;
 
 class TokenIndex extends AnalysisAdapter
 {
@@ -618,9 +620,9 @@ $
 Macro:ParserException
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$parser;
 
-import $1$.*;
+import $0$node.*;
 
 @SuppressWarnings("serial")
 public class ParserException extends Exception
@@ -657,7 +659,7 @@ $
 Macro:State
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$parser;
 
 import java.util.List;
 
diff --git a/src/main/resources/org/sablecc/sablecc/productions.txt b/src/main/resources/org/sablecc/sablecc/productions.txt
index 90b681ff3c59ce77a23edec8d605ceb9eb5b5017..2957990e5c297ab2e0b5dbcb18131f2eaf47b8eb 100644
--- a/src/main/resources/org/sablecc/sablecc/productions.txt
+++ b/src/main/resources/org/sablecc/sablecc/productions.txt
@@ -8,7 +8,7 @@
 Macro:Production
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
 public abstract class $1$ extends Node
 {
diff --git a/src/main/resources/org/sablecc/sablecc/tokens.txt b/src/main/resources/org/sablecc/sablecc/tokens.txt
index 28294f026b95ce442b5e3fa99f1966350feeaac3..ce4cfbc9f63af4e19bf0140f6e7030a1b4421c31 100644
--- a/src/main/resources/org/sablecc/sablecc/tokens.txt
+++ b/src/main/resources/org/sablecc/sablecc/tokens.txt
@@ -5,94 +5,85 @@
  * modification of SableCC.                                  *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-// 0 : xxx.node
-// 1 : xxx.analysis
-// 2 : Txxx
 Macro:VariableTextToken
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
-import $1$.*;
+import $0$analysis.Analysis;
 
-
-public final class $2$ extends Token
+public final class $1$ extends Token
 {
-    public $2$(String text)
+    public $1$(String text)
     {
         super(text);
     }
 
-    public $2$(String text, int line, int pos)
+    public $1$(String text, int line, int pos)
     {
         super(text, line, pos);
     }
 
-    public $2$($2$ token)
+    public $1$($1$ token)
     {
         super(token);
     }
 
     @Override
-    public $2$ clone()
+    public $1$ clone()
     {
-        return new $2$(this);
+        return new $1$(this);
     }
 
     @Override
     public void apply(Switch sw)
     {
-        ((Analysis) sw).case$2$(this);
+        ((Analysis) sw).case$1$(this);
     }
 }
 
 $
 
-// 0 : xxx.node
-// 1 : xxx.analysis
-// 2 : Txxx
-// 3 : xxx
 Macro:FixedTextToken
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
-
-import $1$.*;
+package $0$node;
 
+import $0$analysis.Analysis;
 
-public final class $2$ extends Token
+public final class $1$ extends Token
 {
-    public $2$()
+    public $1$()
     {
-        super("$3$");
+        super("$2$");
     }
 
-    public $2$(int line, int pos)
+    public $1$(int line, int pos)
     {
-        super("$3$", line, pos);
+        super("$2$", line, pos);
     }
 
-    public $2$($2$ token)
+    public $1$($1$ token)
     {
         super(token);
     }
 
     @Override
-    public $2$ clone()
+    public $1$ clone()
     {
-        return new $2$(this);
+        return new $1$(this);
     }
 
     @Override
     public void apply(Switch sw)
     {
-        ((Analysis) sw).case$2$(this);
+        ((Analysis) sw).case$1$(this);
     }
 
     @Override
     public void setText(String text)
     {
-        throw new RuntimeException("Cannot change $2$ text.");
+        throw new RuntimeException("Cannot change $1$ text.");
     }
 }
 
diff --git a/src/main/resources/org/sablecc/sablecc/utils.txt b/src/main/resources/org/sablecc/sablecc/utils.txt
index 13ce65183810bdd68b5171378238c8e11090b6e0..92ce0860324b63443c648c2b78dfd8457799d02a 100644
--- a/src/main/resources/org/sablecc/sablecc/utils.txt
+++ b/src/main/resources/org/sablecc/sablecc/utils.txt
@@ -8,13 +8,13 @@
 Macro:Start
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
-import $1$.*;
+import $0$analysis.Analysis;
 
 public final class Start extends Node
 {
-    private $2$ _$3$_;
+    private $1$ _$2$_;
     private EOF _eof_;
 
     public Start()
@@ -23,17 +23,17 @@ public final class Start extends Node
     }
 
     public Start(
-        $2$ _$3$_,
+        $1$ _$2$_,
         EOF _eof_)
     {
-        set$2$(_$3$_);
+        set$1$(_$2$_);
         setEOF(_eof_);
     }
 
     public Start(Start node)
     {
         super(node);
-        set$2$(cloneNode(node._$3$_));
+        set$1$(cloneNode(node._$2$_));
         setEOF(cloneNode(node._eof_));
     }
 
@@ -49,16 +49,16 @@ public final class Start extends Node
         ((Analysis) sw).caseStart(this);
     }
 
-    public $2$ get$2$()
+    public $1$ get$1$()
     {
-        return this._$3$_;
+        return this._$2$_;
     }
 
-    public void set$2$($2$ node)
+    public void set$1$($1$ node)
     {
-        if(this._$3$_ != null)
+        if(this._$2$_ != null)
         {
-            this._$3$_.parent(null);
+            this._$2$_.parent(null);
         }
 
         if(node != null)
@@ -71,7 +71,7 @@ public final class Start extends Node
             node.parent(this);
         }
 
-        this._$3$_ = node;
+        this._$2$_ = node;
     }
 
     public EOF getEOF()
@@ -102,9 +102,9 @@ public final class Start extends Node
     @Override
     void removeChild(Node child)
     {
-        if(this._$3$_ == child)
+        if(this._$2$_ == child)
         {
-            this._$3$_ = null;
+            this._$2$_ = null;
             return;
         }
 
@@ -120,9 +120,9 @@ public final class Start extends Node
     @Override
     void replaceChild(Node oldChild, Node newChild)
     {
-        if(this._$3$_ == oldChild)
+        if(this._$2$_ == oldChild)
         {
-            set$2$(($2$) newChild);
+            set$1$(($1$) newChild);
             return;
         }
 
@@ -139,7 +139,7 @@ public final class Start extends Node
     public String toString()
     {
         return "" +
-            toString(this._$3$_) +
+            toString(this._$2$_) +
             toString(this._eof_);
     }
 }
@@ -149,10 +149,9 @@ $
 Macro:EOF
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
-
-import $1$.*;
+package $0$node;
 
+import $0$analysis.Analysis;
 
 public final class EOF extends Token
 {
@@ -189,12 +188,11 @@ $
 Macro:Token
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
 import de.hhu.stups.sablecc.patch.IToken;
 import de.hhu.stups.sablecc.patch.SourcePosition;
 
-
 public abstract class Token extends Node implements IToken
 {
     private String text;
@@ -324,7 +322,7 @@ $
 Macro:Node
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -419,7 +417,7 @@ $
 Macro:Switch
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
 public interface Switch
 {
@@ -431,7 +429,7 @@ $
 Macro:Switchable
 /* This file was generated by SableCC (http://www.sablecc.org/). */
 
-package $0$;
+package $0$node;
 
 public interface Switchable
 {