From 5f0d1ab24a85919dab3e427cebcbf1ded8d2da77 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 25 Apr 2024 15:15:14 +0200
Subject: [PATCH] Remove copy constructors from generated nodes again

To prevent ambiguous constructor calls for alternatives that have
exactly one child node from the same production.
---
 .../stups/sablecc/patch/PositionedNode.java   | 13 +++++-
 .../java/org/sablecc/sablecc/node/AAlt.java   | 15 +++----
 .../sablecc/sablecc/node/AAltTransform.java   | 15 +++----
 .../java/org/sablecc/sablecc/node/AAst.java   | 11 ++---
 .../org/sablecc/sablecc/node/AAstAlt.java     | 13 +++---
 .../org/sablecc/sablecc/node/AAstProd.java    | 13 +++---
 .../org/sablecc/sablecc/node/ACharBasic.java  | 11 ++---
 .../org/sablecc/sablecc/node/ACharChar.java   | 11 ++---
 .../org/sablecc/sablecc/node/AConcat.java     | 11 ++---
 .../org/sablecc/sablecc/node/ADecChar.java    | 11 ++---
 .../java/org/sablecc/sablecc/node/AElem.java  | 17 ++++----
 .../org/sablecc/sablecc/node/AGrammar.java    | 23 +++++-----
 .../org/sablecc/sablecc/node/AHelperDef.java  | 13 +++---
 .../org/sablecc/sablecc/node/AHelpers.java    | 11 ++---
 .../org/sablecc/sablecc/node/AHexChar.java    | 11 ++---
 .../org/sablecc/sablecc/node/AIdBasic.java    | 11 ++---
 .../org/sablecc/sablecc/node/AIgnTokens.java  | 11 ++---
 .../sablecc/sablecc/node/AIntervalSet.java    | 13 +++---
 .../org/sablecc/sablecc/node/AListTerm.java   | 13 +++---
 .../org/sablecc/sablecc/node/AMinusBinOp.java |  9 ++--
 .../sablecc/sablecc/node/ANewListTerm.java    | 15 +++----
 .../org/sablecc/sablecc/node/ANewTerm.java    | 15 +++----
 .../org/sablecc/sablecc/node/ANullTerm.java   |  9 ++--
 .../sablecc/sablecc/node/AOperationSet.java   | 15 +++----
 .../org/sablecc/sablecc/node/APlusBinOp.java  |  9 ++--
 .../org/sablecc/sablecc/node/APlusUnOp.java   | 11 ++---
 .../java/org/sablecc/sablecc/node/AProd.java  | 17 ++++----
 .../org/sablecc/sablecc/node/AProdName.java   | 13 +++---
 .../sablecc/node/AProductionSpecifier.java    |  9 ++--
 .../sablecc/sablecc/node/AProductions.java    | 11 ++---
 .../org/sablecc/sablecc/node/AQMarkUnOp.java  | 11 ++---
 .../org/sablecc/sablecc/node/ARegExp.java     | 11 ++---
 .../sablecc/sablecc/node/ARegExpBasic.java    | 11 ++---
 .../org/sablecc/sablecc/node/ASetBasic.java   | 11 ++---
 .../sablecc/sablecc/node/ASimpleListTerm.java | 15 +++----
 .../org/sablecc/sablecc/node/ASimpleTerm.java | 15 +++----
 .../org/sablecc/sablecc/node/AStarUnOp.java   | 11 ++---
 .../org/sablecc/sablecc/node/AStateList.java  | 15 +++----
 .../sablecc/sablecc/node/AStateListTail.java  | 13 +++---
 .../org/sablecc/sablecc/node/AStates.java     | 11 ++---
 .../sablecc/sablecc/node/AStringBasic.java    | 11 ++---
 .../org/sablecc/sablecc/node/ATokenDef.java   | 19 ++++-----
 .../sablecc/sablecc/node/ATokenSpecifier.java |  9 ++--
 .../org/sablecc/sablecc/node/ATokens.java     | 11 ++---
 .../org/sablecc/sablecc/node/ATransition.java | 11 ++---
 .../java/org/sablecc/sablecc/node/AUnExp.java | 13 +++---
 .../java/org/sablecc/sablecc/node/EOF.java    |  9 ++--
 .../java/org/sablecc/sablecc/node/Node.java   | 10 +----
 .../java/org/sablecc/sablecc/node/PAlt.java   |  5 ---
 .../sablecc/sablecc/node/PAltTransform.java   |  5 ---
 .../java/org/sablecc/sablecc/node/PAst.java   |  5 ---
 .../org/sablecc/sablecc/node/PAstAlt.java     |  5 ---
 .../org/sablecc/sablecc/node/PAstProd.java    |  5 ---
 .../java/org/sablecc/sablecc/node/PBasic.java |  5 ---
 .../java/org/sablecc/sablecc/node/PBinOp.java |  5 ---
 .../java/org/sablecc/sablecc/node/PChar.java  |  5 ---
 .../org/sablecc/sablecc/node/PConcat.java     |  5 ---
 .../java/org/sablecc/sablecc/node/PElem.java  |  5 ---
 .../org/sablecc/sablecc/node/PGrammar.java    |  5 ---
 .../org/sablecc/sablecc/node/PHelperDef.java  |  5 ---
 .../org/sablecc/sablecc/node/PHelpers.java    |  5 ---
 .../org/sablecc/sablecc/node/PIgnTokens.java  |  5 ---
 .../org/sablecc/sablecc/node/PListTerm.java   |  5 ---
 .../java/org/sablecc/sablecc/node/PProd.java  |  5 ---
 .../org/sablecc/sablecc/node/PProdName.java   |  5 ---
 .../sablecc/sablecc/node/PProductions.java    |  5 ---
 .../org/sablecc/sablecc/node/PRegExp.java     |  5 ---
 .../java/org/sablecc/sablecc/node/PSet.java   |  5 ---
 .../org/sablecc/sablecc/node/PSpecifier.java  |  5 ---
 .../org/sablecc/sablecc/node/PStateList.java  |  5 ---
 .../sablecc/sablecc/node/PStateListTail.java  |  5 ---
 .../org/sablecc/sablecc/node/PStates.java     |  5 ---
 .../java/org/sablecc/sablecc/node/PTerm.java  |  5 ---
 .../org/sablecc/sablecc/node/PTokenDef.java   |  5 ---
 .../org/sablecc/sablecc/node/PTokens.java     |  5 ---
 .../org/sablecc/sablecc/node/PTransition.java |  5 ---
 .../java/org/sablecc/sablecc/node/PUnExp.java |  5 ---
 .../java/org/sablecc/sablecc/node/PUnOp.java  |  5 ---
 .../java/org/sablecc/sablecc/node/Start.java  | 13 +++---
 .../org/sablecc/sablecc/node/TAbstract.java   |  9 ++--
 .../java/org/sablecc/sablecc/node/TArrow.java |  9 ++--
 .../java/org/sablecc/sablecc/node/TBar.java   |  9 ++--
 .../java/org/sablecc/sablecc/node/TBlank.java |  9 ++--
 .../java/org/sablecc/sablecc/node/TChar.java  |  9 ++--
 .../java/org/sablecc/sablecc/node/TColon.java |  9 ++--
 .../java/org/sablecc/sablecc/node/TComma.java |  9 ++--
 .../org/sablecc/sablecc/node/TComment.java    |  9 ++--
 .../java/org/sablecc/sablecc/node/TDDot.java  |  9 ++--
 .../org/sablecc/sablecc/node/TDecChar.java    |  9 ++--
 .../java/org/sablecc/sablecc/node/TDot.java   |  9 ++--
 .../java/org/sablecc/sablecc/node/TEqual.java |  9 ++--
 .../org/sablecc/sablecc/node/THelpers.java    |  9 ++--
 .../org/sablecc/sablecc/node/THexChar.java    |  9 ++--
 .../java/org/sablecc/sablecc/node/TId.java    |  9 ++--
 .../org/sablecc/sablecc/node/TIgnored.java    |  9 ++--
 .../java/org/sablecc/sablecc/node/TLBkt.java  |  9 ++--
 .../org/sablecc/sablecc/node/TLBrace.java     |  9 ++--
 .../java/org/sablecc/sablecc/node/TLPar.java  |  9 ++--
 .../java/org/sablecc/sablecc/node/TMinus.java |  9 ++--
 .../java/org/sablecc/sablecc/node/TNew.java   |  9 ++--
 .../java/org/sablecc/sablecc/node/TNull.java  |  9 ++--
 .../org/sablecc/sablecc/node/TPackage.java    |  9 ++--
 .../java/org/sablecc/sablecc/node/TPkgId.java |  9 ++--
 .../java/org/sablecc/sablecc/node/TPlus.java  |  9 ++--
 .../sablecc/node/TProductionSpecifier.java    |  9 ++--
 .../sablecc/sablecc/node/TProductions.java    |  9 ++--
 .../java/org/sablecc/sablecc/node/TQMark.java |  9 ++--
 .../java/org/sablecc/sablecc/node/TRBkt.java  |  9 ++--
 .../org/sablecc/sablecc/node/TRBrace.java     |  9 ++--
 .../java/org/sablecc/sablecc/node/TRPar.java  |  9 ++--
 .../org/sablecc/sablecc/node/TSemicolon.java  |  9 ++--
 .../java/org/sablecc/sablecc/node/TSlash.java |  9 ++--
 .../java/org/sablecc/sablecc/node/TStar.java  |  9 ++--
 .../org/sablecc/sablecc/node/TStates.java     |  9 ++--
 .../org/sablecc/sablecc/node/TString.java     |  9 ++--
 .../org/sablecc/sablecc/node/TSyntax.java     |  9 ++--
 .../sablecc/sablecc/node/TTokenSpecifier.java |  9 ++--
 .../org/sablecc/sablecc/node/TTokens.java     |  9 ++--
 .../java/org/sablecc/sablecc/node/TTree.java  |  9 ++--
 .../java/org/sablecc/sablecc/node/Token.java  | 10 +----
 .../org/sablecc/sablecc/alternatives.txt      | 17 ++++----
 .../org/sablecc/sablecc/productions.txt       |  5 ---
 .../resources/org/sablecc/sablecc/tokens.txt  | 18 +++-----
 .../resources/org/sablecc/sablecc/utils.txt   | 42 +++++--------------
 124 files changed, 381 insertions(+), 831 deletions(-)

diff --git a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java
index dea3bfe..ecd166a 100644
--- a/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java
+++ b/sablecc-runtime/src/main/java/de/hhu/stups/sablecc/patch/PositionedNode.java
@@ -19,8 +19,17 @@ public class PositionedNode {
     this(null, null);
   }
 
-  public PositionedNode(final PositionedNode node) {
-    this(node.startPos, node.endPos);
+  /**
+   * Copies the {@link SourcePosition}s from the given node to this node.
+   * This is an internal helper method for use in {@link Object#clone()} implementations.
+   * 
+   * @param node the node from which to copy the source positions
+   */
+  protected final void initSourcePositionsFrom(PositionedNode node) {
+    // Intentionally do not use the accessors (getStartPos, getEndPos) here
+    // so that cloning a Token does not trigger lazy creation of SourcePosition objects.
+    this.startPos = node.startPos;
+    this.endPos = node.endPos;
   }
 
   public SourcePosition getStartPos() {
diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 868516d..85c748f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -31,18 +31,15 @@ public final class AAlt extends PAlt
 
     }
 
-    public AAlt(AAlt node)
-    {
-        super(node);
-        setAltName(cloneNode(node._altName_));
-        setElems(cloneList(node._elems_));
-        setAltTransform(cloneNode(node._altTransform_));
-    }
-
     @Override
     public AAlt clone()
     {
-        return new AAlt(this);
+        AAlt cloned = new AAlt();
+        cloned.setAltName(cloneNode(this._altName_));
+        cloned.setElems(cloneList(this._elems_));
+        cloned.setAltTransform(cloneNode(this._altTransform_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 7a3711c..d6e9126 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -31,18 +31,15 @@ public final class AAltTransform extends PAltTransform
 
     }
 
-    public AAltTransform(AAltTransform node)
-    {
-        super(node);
-        setLBrace(cloneNode(node._lBrace_));
-        setTerms(cloneList(node._terms_));
-        setRBrace(cloneNode(node._rBrace_));
-    }
-
     @Override
     public AAltTransform clone()
     {
-        return new AAltTransform(this);
+        AAltTransform cloned = new AAltTransform();
+        cloned.setLBrace(cloneNode(this._lBrace_));
+        cloned.setTerms(cloneList(this._terms_));
+        cloned.setRBrace(cloneNode(this._rBrace_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index a0c94e0..b373a77 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -23,16 +23,13 @@ public final class AAst extends PAst
 
     }
 
-    public AAst(AAst node)
-    {
-        super(node);
-        setProds(cloneList(node._prods_));
-    }
-
     @Override
     public AAst clone()
     {
-        return new AAst(this);
+        AAst cloned = new AAst();
+        cloned.setProds(cloneList(this._prods_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index e08e5cf..1e7afed 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -27,17 +27,14 @@ public final class AAstAlt extends PAstAlt
 
     }
 
-    public AAstAlt(AAstAlt node)
-    {
-        super(node);
-        setAltName(cloneNode(node._altName_));
-        setElems(cloneList(node._elems_));
-    }
-
     @Override
     public AAstAlt clone()
     {
-        return new AAstAlt(this);
+        AAstAlt cloned = new AAstAlt();
+        cloned.setAltName(cloneNode(this._altName_));
+        cloned.setElems(cloneList(this._elems_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index aaa856e..5c15b3d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -27,17 +27,14 @@ public final class AAstProd extends PAstProd
 
     }
 
-    public AAstProd(AAstProd node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setAlts(cloneList(node._alts_));
-    }
-
     @Override
     public AAstProd clone()
     {
-        return new AAstProd(this);
+        AAstProd cloned = new AAstProd();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setAlts(cloneList(this._alts_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
index 925d938..30775a7 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharBasic.java
@@ -19,16 +19,13 @@ public final class ACharBasic extends PBasic
 
     }
 
-    public ACharBasic(ACharBasic node)
-    {
-        super(node);
-        setChar(cloneNode(node._char_));
-    }
-
     @Override
     public ACharBasic clone()
     {
-        return new ACharBasic(this);
+        ACharBasic cloned = new ACharBasic();
+        cloned.setChar(cloneNode(this._char_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ACharChar.java b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
index 188050b..e8c8e61 100644
--- a/src/main/java/org/sablecc/sablecc/node/ACharChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ACharChar.java
@@ -19,16 +19,13 @@ public final class ACharChar extends PChar
 
     }
 
-    public ACharChar(ACharChar node)
-    {
-        super(node);
-        setChar(cloneNode(node._char_));
-    }
-
     @Override
     public ACharChar clone()
     {
-        return new ACharChar(this);
+        ACharChar cloned = new ACharChar();
+        cloned.setChar(cloneNode(this._char_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 1ade31e..c83c0f7 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -23,16 +23,13 @@ public final class AConcat extends PConcat
 
     }
 
-    public AConcat(AConcat node)
-    {
-        super(node);
-        setUnExps(cloneList(node._unExps_));
-    }
-
     @Override
     public AConcat clone()
     {
-        return new AConcat(this);
+        AConcat cloned = new AConcat();
+        cloned.setUnExps(cloneList(this._unExps_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ADecChar.java b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
index e2743bd..41091bf 100644
--- a/src/main/java/org/sablecc/sablecc/node/ADecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/ADecChar.java
@@ -19,16 +19,13 @@ public final class ADecChar extends PChar
 
     }
 
-    public ADecChar(ADecChar node)
-    {
-        super(node);
-        setDecChar(cloneNode(node._decChar_));
-    }
-
     @Override
     public ADecChar clone()
     {
-        return new ADecChar(this);
+        ADecChar cloned = new ADecChar();
+        cloned.setDecChar(cloneNode(this._decChar_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AElem.java b/src/main/java/org/sablecc/sablecc/node/AElem.java
index ef1d47c..5f9963f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/AElem.java
@@ -31,19 +31,16 @@ public final class AElem extends PElem
 
     }
 
-    public AElem(AElem node)
-    {
-        super(node);
-        setElemName(cloneNode(node._elemName_));
-        setSpecifier(cloneNode(node._specifier_));
-        setId(cloneNode(node._id_));
-        setUnOp(cloneNode(node._unOp_));
-    }
-
     @Override
     public AElem clone()
     {
-        return new AElem(this);
+        AElem cloned = new AElem();
+        cloned.setElemName(cloneNode(this._elemName_));
+        cloned.setSpecifier(cloneNode(this._specifier_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setUnOp(cloneNode(this._unOp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index 6a2cd2a..07f40c9 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -47,22 +47,19 @@ public final class AGrammar extends PGrammar
 
     }
 
-    public AGrammar(AGrammar node)
-    {
-        super(node);
-        setPackage(cloneList(node._package_));
-        setHelpers(cloneNode(node._helpers_));
-        setStates(cloneNode(node._states_));
-        setTokens(cloneNode(node._tokens_));
-        setIgnTokens(cloneNode(node._ignTokens_));
-        setProductions(cloneNode(node._productions_));
-        setAst(cloneNode(node._ast_));
-    }
-
     @Override
     public AGrammar clone()
     {
-        return new AGrammar(this);
+        AGrammar cloned = new AGrammar();
+        cloned.setPackage(cloneList(this._package_));
+        cloned.setHelpers(cloneNode(this._helpers_));
+        cloned.setStates(cloneNode(this._states_));
+        cloned.setTokens(cloneNode(this._tokens_));
+        cloned.setIgnTokens(cloneNode(this._ignTokens_));
+        cloned.setProductions(cloneNode(this._productions_));
+        cloned.setAst(cloneNode(this._ast_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
index f19e5c7..0cea096 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelperDef.java
@@ -23,17 +23,14 @@ public final class AHelperDef extends PHelperDef
 
     }
 
-    public AHelperDef(AHelperDef node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setRegExp(cloneNode(node._regExp_));
-    }
-
     @Override
     public AHelperDef clone()
     {
-        return new AHelperDef(this);
+        AHelperDef cloned = new AHelperDef();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setRegExp(cloneNode(this._regExp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index 772d6b8..1cae38c 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -23,16 +23,13 @@ public final class AHelpers extends PHelpers
 
     }
 
-    public AHelpers(AHelpers node)
-    {
-        super(node);
-        setHelperDefs(cloneList(node._helperDefs_));
-    }
-
     @Override
     public AHelpers clone()
     {
-        return new AHelpers(this);
+        AHelpers cloned = new AHelpers();
+        cloned.setHelperDefs(cloneList(this._helperDefs_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AHexChar.java b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
index bde57e7..9bba9d5 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHexChar.java
@@ -19,16 +19,13 @@ public final class AHexChar extends PChar
 
     }
 
-    public AHexChar(AHexChar node)
-    {
-        super(node);
-        setHexChar(cloneNode(node._hexChar_));
-    }
-
     @Override
     public AHexChar clone()
     {
-        return new AHexChar(this);
+        AHexChar cloned = new AHexChar();
+        cloned.setHexChar(cloneNode(this._hexChar_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
index 565e320..7c39424 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIdBasic.java
@@ -19,16 +19,13 @@ public final class AIdBasic extends PBasic
 
     }
 
-    public AIdBasic(AIdBasic node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-    }
-
     @Override
     public AIdBasic clone()
     {
-        return new AIdBasic(this);
+        AIdBasic cloned = new AIdBasic();
+        cloned.setId(cloneNode(this._id_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index 5290ee2..cd72f33 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -23,16 +23,13 @@ public final class AIgnTokens extends PIgnTokens
 
     }
 
-    public AIgnTokens(AIgnTokens node)
-    {
-        super(node);
-        setListId(cloneList(node._listId_));
-    }
-
     @Override
     public AIgnTokens clone()
     {
-        return new AIgnTokens(this);
+        AIgnTokens cloned = new AIgnTokens();
+        cloned.setListId(cloneList(this._listId_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
index 9bff5aa..2095404 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIntervalSet.java
@@ -23,17 +23,14 @@ public final class AIntervalSet extends PSet
 
     }
 
-    public AIntervalSet(AIntervalSet node)
-    {
-        super(node);
-        setLeft(cloneNode(node._left_));
-        setRight(cloneNode(node._right_));
-    }
-
     @Override
     public AIntervalSet clone()
     {
-        return new AIntervalSet(this);
+        AIntervalSet cloned = new AIntervalSet();
+        cloned.setLeft(cloneNode(this._left_));
+        cloned.setRight(cloneNode(this._right_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index bfa2c59..737a840 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -27,17 +27,14 @@ public final class AListTerm extends PTerm
 
     }
 
-    public AListTerm(AListTerm node)
-    {
-        super(node);
-        setLBkt(cloneNode(node._lBkt_));
-        setListTerms(cloneList(node._listTerms_));
-    }
-
     @Override
     public AListTerm clone()
     {
-        return new AListTerm(this);
+        AListTerm cloned = new AListTerm();
+        cloned.setLBkt(cloneNode(this._lBkt_));
+        cloned.setListTerms(cloneList(this._listTerms_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
index fd1e1e5..38822d8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AMinusBinOp.java
@@ -11,15 +11,12 @@ public final class AMinusBinOp extends PBinOp
     {
     }
 
-    public AMinusBinOp(AMinusBinOp node)
-    {
-        super(node);
-    }
-
     @Override
     public AMinusBinOp clone()
     {
-        return new AMinusBinOp(this);
+        AMinusBinOp cloned = new AMinusBinOp();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index b2c151b..c630b91 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -31,18 +31,15 @@ public final class ANewListTerm extends PListTerm
 
     }
 
-    public ANewListTerm(ANewListTerm node)
-    {
-        super(node);
-        setProdName(cloneNode(node._prodName_));
-        setLPar(cloneNode(node._lPar_));
-        setParams(cloneList(node._params_));
-    }
-
     @Override
     public ANewListTerm clone()
     {
-        return new ANewListTerm(this);
+        ANewListTerm cloned = new ANewListTerm();
+        cloned.setProdName(cloneNode(this._prodName_));
+        cloned.setLPar(cloneNode(this._lPar_));
+        cloned.setParams(cloneList(this._params_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index 4fb329b..0c63475 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -31,18 +31,15 @@ public final class ANewTerm extends PTerm
 
     }
 
-    public ANewTerm(ANewTerm node)
-    {
-        super(node);
-        setProdName(cloneNode(node._prodName_));
-        setLPar(cloneNode(node._lPar_));
-        setParams(cloneList(node._params_));
-    }
-
     @Override
     public ANewTerm clone()
     {
-        return new ANewTerm(this);
+        ANewTerm cloned = new ANewTerm();
+        cloned.setProdName(cloneNode(this._prodName_));
+        cloned.setLPar(cloneNode(this._lPar_));
+        cloned.setParams(cloneList(this._params_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
index e5846fc..a8fc22e 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANullTerm.java
@@ -11,15 +11,12 @@ public final class ANullTerm extends PTerm
     {
     }
 
-    public ANullTerm(ANullTerm node)
-    {
-        super(node);
-    }
-
     @Override
     public ANullTerm clone()
     {
-        return new ANullTerm(this);
+        ANullTerm cloned = new ANullTerm();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
index fc8b1c3..5ea786b 100644
--- a/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/AOperationSet.java
@@ -27,18 +27,15 @@ public final class AOperationSet extends PSet
 
     }
 
-    public AOperationSet(AOperationSet node)
-    {
-        super(node);
-        setLeft(cloneNode(node._left_));
-        setBinOp(cloneNode(node._binOp_));
-        setRight(cloneNode(node._right_));
-    }
-
     @Override
     public AOperationSet clone()
     {
-        return new AOperationSet(this);
+        AOperationSet cloned = new AOperationSet();
+        cloned.setLeft(cloneNode(this._left_));
+        cloned.setBinOp(cloneNode(this._binOp_));
+        cloned.setRight(cloneNode(this._right_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
index e7ac89e..cfcb189 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusBinOp.java
@@ -11,15 +11,12 @@ public final class APlusBinOp extends PBinOp
     {
     }
 
-    public APlusBinOp(APlusBinOp node)
-    {
-        super(node);
-    }
-
     @Override
     public APlusBinOp clone()
     {
-        return new APlusBinOp(this);
+        APlusBinOp cloned = new APlusBinOp();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
index 06e6fa7..c766c02 100644
--- a/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/APlusUnOp.java
@@ -19,16 +19,13 @@ public final class APlusUnOp extends PUnOp
 
     }
 
-    public APlusUnOp(APlusUnOp node)
-    {
-        super(node);
-        setPlus(cloneNode(node._plus_));
-    }
-
     @Override
     public APlusUnOp clone()
     {
-        return new APlusUnOp(this);
+        APlusUnOp cloned = new APlusUnOp();
+        cloned.setPlus(cloneNode(this._plus_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index cd2f503..ca5a37d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -35,19 +35,16 @@ public final class AProd extends PProd
 
     }
 
-    public AProd(AProd node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setArrow(cloneNode(node._arrow_));
-        setProdTransform(cloneList(node._prodTransform_));
-        setAlts(cloneList(node._alts_));
-    }
-
     @Override
     public AProd clone()
     {
-        return new AProd(this);
+        AProd cloned = new AProd();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setArrow(cloneNode(this._arrow_));
+        cloned.setProdTransform(cloneList(this._prodTransform_));
+        cloned.setAlts(cloneList(this._alts_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProdName.java b/src/main/java/org/sablecc/sablecc/node/AProdName.java
index a11a380..8e46818 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProdName.java
@@ -23,17 +23,14 @@ public final class AProdName extends PProdName
 
     }
 
-    public AProdName(AProdName node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setProdNameTail(cloneNode(node._prodNameTail_));
-    }
-
     @Override
     public AProdName clone()
     {
-        return new AProdName(this);
+        AProdName cloned = new AProdName();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setProdNameTail(cloneNode(this._prodNameTail_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
index cd822a6..74304a3 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductionSpecifier.java
@@ -11,15 +11,12 @@ public final class AProductionSpecifier extends PSpecifier
     {
     }
 
-    public AProductionSpecifier(AProductionSpecifier node)
-    {
-        super(node);
-    }
-
     @Override
     public AProductionSpecifier clone()
     {
-        return new AProductionSpecifier(this);
+        AProductionSpecifier cloned = new AProductionSpecifier();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index 4e73e96..569464a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -23,16 +23,13 @@ public final class AProductions extends PProductions
 
     }
 
-    public AProductions(AProductions node)
-    {
-        super(node);
-        setProds(cloneList(node._prods_));
-    }
-
     @Override
     public AProductions clone()
     {
-        return new AProductions(this);
+        AProductions cloned = new AProductions();
+        cloned.setProds(cloneList(this._prods_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
index c78c19f..ec754fc 100644
--- a/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AQMarkUnOp.java
@@ -19,16 +19,13 @@ public final class AQMarkUnOp extends PUnOp
 
     }
 
-    public AQMarkUnOp(AQMarkUnOp node)
-    {
-        super(node);
-        setQMark(cloneNode(node._qMark_));
-    }
-
     @Override
     public AQMarkUnOp clone()
     {
-        return new AQMarkUnOp(this);
+        AQMarkUnOp cloned = new AQMarkUnOp();
+        cloned.setQMark(cloneNode(this._qMark_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index 7b604e5..6ebe576 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -23,16 +23,13 @@ public final class ARegExp extends PRegExp
 
     }
 
-    public ARegExp(ARegExp node)
-    {
-        super(node);
-        setConcats(cloneList(node._concats_));
-    }
-
     @Override
     public ARegExp clone()
     {
-        return new ARegExp(this);
+        ARegExp cloned = new ARegExp();
+        cloned.setConcats(cloneList(this._concats_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
index 4978f89..3f615ba 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExpBasic.java
@@ -19,16 +19,13 @@ public final class ARegExpBasic extends PBasic
 
     }
 
-    public ARegExpBasic(ARegExpBasic node)
-    {
-        super(node);
-        setRegExp(cloneNode(node._regExp_));
-    }
-
     @Override
     public ARegExpBasic clone()
     {
-        return new ARegExpBasic(this);
+        ARegExpBasic cloned = new ARegExpBasic();
+        cloned.setRegExp(cloneNode(this._regExp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
index 53a957c..b45847e 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASetBasic.java
@@ -19,16 +19,13 @@ public final class ASetBasic extends PBasic
 
     }
 
-    public ASetBasic(ASetBasic node)
-    {
-        super(node);
-        setSet(cloneNode(node._set_));
-    }
-
     @Override
     public ASetBasic clone()
     {
-        return new ASetBasic(this);
+        ASetBasic cloned = new ASetBasic();
+        cloned.setSet(cloneNode(this._set_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
index de072dd..b2e1b64 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleListTerm.java
@@ -27,18 +27,15 @@ public final class ASimpleListTerm extends PListTerm
 
     }
 
-    public ASimpleListTerm(ASimpleListTerm node)
-    {
-        super(node);
-        setSpecifier(cloneNode(node._specifier_));
-        setId(cloneNode(node._id_));
-        setSimpleTermTail(cloneNode(node._simpleTermTail_));
-    }
-
     @Override
     public ASimpleListTerm clone()
     {
-        return new ASimpleListTerm(this);
+        ASimpleListTerm cloned = new ASimpleListTerm();
+        cloned.setSpecifier(cloneNode(this._specifier_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setSimpleTermTail(cloneNode(this._simpleTermTail_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
index 801c48c..54cfa95 100644
--- a/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ASimpleTerm.java
@@ -27,18 +27,15 @@ public final class ASimpleTerm extends PTerm
 
     }
 
-    public ASimpleTerm(ASimpleTerm node)
-    {
-        super(node);
-        setSpecifier(cloneNode(node._specifier_));
-        setId(cloneNode(node._id_));
-        setSimpleTermTail(cloneNode(node._simpleTermTail_));
-    }
-
     @Override
     public ASimpleTerm clone()
     {
-        return new ASimpleTerm(this);
+        ASimpleTerm cloned = new ASimpleTerm();
+        cloned.setSpecifier(cloneNode(this._specifier_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setSimpleTermTail(cloneNode(this._simpleTermTail_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
index 626ff01..429335d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStarUnOp.java
@@ -19,16 +19,13 @@ public final class AStarUnOp extends PUnOp
 
     }
 
-    public AStarUnOp(AStarUnOp node)
-    {
-        super(node);
-        setStar(cloneNode(node._star_));
-    }
-
     @Override
     public AStarUnOp clone()
     {
-        return new AStarUnOp(this);
+        AStarUnOp cloned = new AStarUnOp();
+        cloned.setStar(cloneNode(this._star_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 706d3c7..8ac649a 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -31,18 +31,15 @@ public final class AStateList extends PStateList
 
     }
 
-    public AStateList(AStateList node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setTransition(cloneNode(node._transition_));
-        setStateLists(cloneList(node._stateLists_));
-    }
-
     @Override
     public AStateList clone()
     {
-        return new AStateList(this);
+        AStateList cloned = new AStateList();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setTransition(cloneNode(this._transition_));
+        cloned.setStateLists(cloneList(this._stateLists_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
index 6f52228..d769f96 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateListTail.java
@@ -23,17 +23,14 @@ public final class AStateListTail extends PStateListTail
 
     }
 
-    public AStateListTail(AStateListTail node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-        setTransition(cloneNode(node._transition_));
-    }
-
     @Override
     public AStateListTail clone()
     {
-        return new AStateListTail(this);
+        AStateListTail cloned = new AStateListTail();
+        cloned.setId(cloneNode(this._id_));
+        cloned.setTransition(cloneNode(this._transition_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index a5bd2e0..634dbf6 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -23,16 +23,13 @@ public final class AStates extends PStates
 
     }
 
-    public AStates(AStates node)
-    {
-        super(node);
-        setListId(cloneList(node._listId_));
-    }
-
     @Override
     public AStates clone()
     {
-        return new AStates(this);
+        AStates cloned = new AStates();
+        cloned.setListId(cloneList(this._listId_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
index ff1dd0a..5ea18ba 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStringBasic.java
@@ -19,16 +19,13 @@ public final class AStringBasic extends PBasic
 
     }
 
-    public AStringBasic(AStringBasic node)
-    {
-        super(node);
-        setString(cloneNode(node._string_));
-    }
-
     @Override
     public AStringBasic clone()
     {
-        return new AStringBasic(this);
+        AStringBasic cloned = new AStringBasic();
+        cloned.setString(cloneNode(this._string_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
index b7af970..85868b1 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenDef.java
@@ -35,20 +35,17 @@ public final class ATokenDef extends PTokenDef
 
     }
 
-    public ATokenDef(ATokenDef node)
-    {
-        super(node);
-        setStateList(cloneNode(node._stateList_));
-        setId(cloneNode(node._id_));
-        setRegExp(cloneNode(node._regExp_));
-        setSlash(cloneNode(node._slash_));
-        setLookAhead(cloneNode(node._lookAhead_));
-    }
-
     @Override
     public ATokenDef clone()
     {
-        return new ATokenDef(this);
+        ATokenDef cloned = new ATokenDef();
+        cloned.setStateList(cloneNode(this._stateList_));
+        cloned.setId(cloneNode(this._id_));
+        cloned.setRegExp(cloneNode(this._regExp_));
+        cloned.setSlash(cloneNode(this._slash_));
+        cloned.setLookAhead(cloneNode(this._lookAhead_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
index b4223d8..13242e8 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokenSpecifier.java
@@ -11,15 +11,12 @@ public final class ATokenSpecifier extends PSpecifier
     {
     }
 
-    public ATokenSpecifier(ATokenSpecifier node)
-    {
-        super(node);
-    }
-
     @Override
     public ATokenSpecifier clone()
     {
-        return new ATokenSpecifier(this);
+        ATokenSpecifier cloned = new ATokenSpecifier();
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index d07b76d..29e0990 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -23,16 +23,13 @@ public final class ATokens extends PTokens
 
     }
 
-    public ATokens(ATokens node)
-    {
-        super(node);
-        setTokenDefs(cloneList(node._tokenDefs_));
-    }
-
     @Override
     public ATokens clone()
     {
-        return new ATokens(this);
+        ATokens cloned = new ATokens();
+        cloned.setTokenDefs(cloneList(this._tokenDefs_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/ATransition.java b/src/main/java/org/sablecc/sablecc/node/ATransition.java
index 0e5499f..e13d1cb 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATransition.java
@@ -19,16 +19,13 @@ public final class ATransition extends PTransition
 
     }
 
-    public ATransition(ATransition node)
-    {
-        super(node);
-        setId(cloneNode(node._id_));
-    }
-
     @Override
     public ATransition clone()
     {
-        return new ATransition(this);
+        ATransition cloned = new ATransition();
+        cloned.setId(cloneNode(this._id_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/AUnExp.java b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
index 6d7d40d..2fcf026 100644
--- a/src/main/java/org/sablecc/sablecc/node/AUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/AUnExp.java
@@ -23,17 +23,14 @@ public final class AUnExp extends PUnExp
 
     }
 
-    public AUnExp(AUnExp node)
-    {
-        super(node);
-        setBasic(cloneNode(node._basic_));
-        setUnOp(cloneNode(node._unOp_));
-    }
-
     @Override
     public AUnExp clone()
     {
-        return new AUnExp(this);
+        AUnExp cloned = new AUnExp();
+        cloned.setBasic(cloneNode(this._basic_));
+        cloned.setUnOp(cloneNode(this._unOp_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/EOF.java b/src/main/java/org/sablecc/sablecc/node/EOF.java
index 8d7e017..7def3d3 100644
--- a/src/main/java/org/sablecc/sablecc/node/EOF.java
+++ b/src/main/java/org/sablecc/sablecc/node/EOF.java
@@ -16,15 +16,12 @@ public final class EOF extends Token
         super("", line, pos);
     }
 
-    public EOF(EOF token)
-    {
-        super(token);
-    }
-
     @Override
     public EOF clone()
     {
-        return new EOF(this);
+        EOF cloned = new EOF(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/Node.java b/src/main/java/org/sablecc/sablecc/node/Node.java
index f37caa1..625a97e 100644
--- a/src/main/java/org/sablecc/sablecc/node/Node.java
+++ b/src/main/java/org/sablecc/sablecc/node/Node.java
@@ -14,14 +14,8 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     protected Node()
     {}
 
-    protected Node(Node node)
-    {
-        super(node);
-        // Copy constructor intentionally does not keep parent!
-        // The new copied node is not a child of the original parent anymore.
-        this.parent = null;
-    }
-
+    // clone intentionally does not keep parent!
+    // The new copied node is not a child of the original parent anymore.
     @Override
     public abstract Node clone();
 
diff --git a/src/main/java/org/sablecc/sablecc/node/PAlt.java b/src/main/java/org/sablecc/sablecc/node/PAlt.java
index 805ab23..335c44a 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAlt.java
@@ -7,11 +7,6 @@ public abstract class PAlt extends Node
     public PAlt()
     {}
 
-    public PAlt(PAlt node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAlt clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAltTransform.java b/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
index f0eafa2..91fdd2f 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
@@ -7,11 +7,6 @@ public abstract class PAltTransform extends Node
     public PAltTransform()
     {}
 
-    public PAltTransform(PAltTransform node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAltTransform clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAst.java b/src/main/java/org/sablecc/sablecc/node/PAst.java
index 04d7430..7d93011 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAst.java
@@ -7,11 +7,6 @@ public abstract class PAst extends Node
     public PAst()
     {}
 
-    public PAst(PAst node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAst clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAstAlt.java b/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
index 7fa3763..68d3159 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
@@ -7,11 +7,6 @@ public abstract class PAstAlt extends Node
     public PAstAlt()
     {}
 
-    public PAstAlt(PAstAlt node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAstAlt clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PAstProd.java b/src/main/java/org/sablecc/sablecc/node/PAstProd.java
index de12a50..d472b41 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstProd.java
@@ -7,11 +7,6 @@ public abstract class PAstProd extends Node
     public PAstProd()
     {}
 
-    public PAstProd(PAstProd node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PAstProd clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PBasic.java b/src/main/java/org/sablecc/sablecc/node/PBasic.java
index 2a3b4b9..d2dce6e 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBasic.java
@@ -7,11 +7,6 @@ public abstract class PBasic extends Node
     public PBasic()
     {}
 
-    public PBasic(PBasic node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PBasic clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PBinOp.java b/src/main/java/org/sablecc/sablecc/node/PBinOp.java
index 1d35acb..4e0f605 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBinOp.java
@@ -7,11 +7,6 @@ public abstract class PBinOp extends Node
     public PBinOp()
     {}
 
-    public PBinOp(PBinOp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PBinOp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PChar.java b/src/main/java/org/sablecc/sablecc/node/PChar.java
index 1e1975c..429049b 100644
--- a/src/main/java/org/sablecc/sablecc/node/PChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PChar.java
@@ -7,11 +7,6 @@ public abstract class PChar extends Node
     public PChar()
     {}
 
-    public PChar(PChar node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PChar clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PConcat.java b/src/main/java/org/sablecc/sablecc/node/PConcat.java
index 7c9ef83..20dce0e 100644
--- a/src/main/java/org/sablecc/sablecc/node/PConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/PConcat.java
@@ -7,11 +7,6 @@ public abstract class PConcat extends Node
     public PConcat()
     {}
 
-    public PConcat(PConcat node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PConcat clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PElem.java b/src/main/java/org/sablecc/sablecc/node/PElem.java
index 748f1bc..b7ec724 100644
--- a/src/main/java/org/sablecc/sablecc/node/PElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/PElem.java
@@ -7,11 +7,6 @@ public abstract class PElem extends Node
     public PElem()
     {}
 
-    public PElem(PElem node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PElem clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PGrammar.java b/src/main/java/org/sablecc/sablecc/node/PGrammar.java
index 8501e4c..aadfe6a 100644
--- a/src/main/java/org/sablecc/sablecc/node/PGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PGrammar.java
@@ -7,11 +7,6 @@ public abstract class PGrammar extends Node
     public PGrammar()
     {}
 
-    public PGrammar(PGrammar node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PGrammar clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PHelperDef.java b/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
index b9e501d..7a2a876 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
@@ -7,11 +7,6 @@ public abstract class PHelperDef extends Node
     public PHelperDef()
     {}
 
-    public PHelperDef(PHelperDef node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PHelperDef clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PHelpers.java b/src/main/java/org/sablecc/sablecc/node/PHelpers.java
index a1ddbf2..bbff36b 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelpers.java
@@ -7,11 +7,6 @@ public abstract class PHelpers extends Node
     public PHelpers()
     {}
 
-    public PHelpers(PHelpers node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PHelpers clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
index fb53108..68cee2a 100644
--- a/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
@@ -7,11 +7,6 @@ public abstract class PIgnTokens extends Node
     public PIgnTokens()
     {}
 
-    public PIgnTokens(PIgnTokens node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PIgnTokens clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PListTerm.java b/src/main/java/org/sablecc/sablecc/node/PListTerm.java
index d8e7a48..5003121 100644
--- a/src/main/java/org/sablecc/sablecc/node/PListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PListTerm.java
@@ -7,11 +7,6 @@ public abstract class PListTerm extends Node
     public PListTerm()
     {}
 
-    public PListTerm(PListTerm node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PListTerm clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PProd.java b/src/main/java/org/sablecc/sablecc/node/PProd.java
index 2d9db40..74e3acc 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProd.java
@@ -7,11 +7,6 @@ public abstract class PProd extends Node
     public PProd()
     {}
 
-    public PProd(PProd node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PProd clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PProdName.java b/src/main/java/org/sablecc/sablecc/node/PProdName.java
index 380e8da..04b99c5 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProdName.java
@@ -7,11 +7,6 @@ public abstract class PProdName extends Node
     public PProdName()
     {}
 
-    public PProdName(PProdName node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PProdName clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PProductions.java b/src/main/java/org/sablecc/sablecc/node/PProductions.java
index 98da826..d908b9b 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProductions.java
@@ -7,11 +7,6 @@ public abstract class PProductions extends Node
     public PProductions()
     {}
 
-    public PProductions(PProductions node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PProductions clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PRegExp.java b/src/main/java/org/sablecc/sablecc/node/PRegExp.java
index 3ebc5a2..93ddece 100644
--- a/src/main/java/org/sablecc/sablecc/node/PRegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PRegExp.java
@@ -7,11 +7,6 @@ public abstract class PRegExp extends Node
     public PRegExp()
     {}
 
-    public PRegExp(PRegExp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PRegExp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PSet.java b/src/main/java/org/sablecc/sablecc/node/PSet.java
index e9d6593..a4ca9c1 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSet.java
@@ -7,11 +7,6 @@ public abstract class PSet extends Node
     public PSet()
     {}
 
-    public PSet(PSet node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PSet clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PSpecifier.java b/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
index 39fc626..ded4e7d 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
@@ -7,11 +7,6 @@ public abstract class PSpecifier extends Node
     public PSpecifier()
     {}
 
-    public PSpecifier(PSpecifier node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PSpecifier clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PStateList.java b/src/main/java/org/sablecc/sablecc/node/PStateList.java
index b8509d1..42a20d5 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateList.java
@@ -7,11 +7,6 @@ public abstract class PStateList extends Node
     public PStateList()
     {}
 
-    public PStateList(PStateList node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PStateList clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PStateListTail.java b/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
index 3968b10..efe93df 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
@@ -7,11 +7,6 @@ public abstract class PStateListTail extends Node
     public PStateListTail()
     {}
 
-    public PStateListTail(PStateListTail node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PStateListTail clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PStates.java b/src/main/java/org/sablecc/sablecc/node/PStates.java
index c0f22d4..d0e1df0 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStates.java
@@ -7,11 +7,6 @@ public abstract class PStates extends Node
     public PStates()
     {}
 
-    public PStates(PStates node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PStates clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTerm.java b/src/main/java/org/sablecc/sablecc/node/PTerm.java
index e3e9373..cef531e 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTerm.java
@@ -7,11 +7,6 @@ public abstract class PTerm extends Node
     public PTerm()
     {}
 
-    public PTerm(PTerm node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTerm clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTokenDef.java b/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
index 783f742..b5d33a2 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
@@ -7,11 +7,6 @@ public abstract class PTokenDef extends Node
     public PTokenDef()
     {}
 
-    public PTokenDef(PTokenDef node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTokenDef clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTokens.java b/src/main/java/org/sablecc/sablecc/node/PTokens.java
index d0b4af8..bf5b100 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokens.java
@@ -7,11 +7,6 @@ public abstract class PTokens extends Node
     public PTokens()
     {}
 
-    public PTokens(PTokens node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTokens clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PTransition.java b/src/main/java/org/sablecc/sablecc/node/PTransition.java
index d8b166d..a03a228 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTransition.java
@@ -7,11 +7,6 @@ public abstract class PTransition extends Node
     public PTransition()
     {}
 
-    public PTransition(PTransition node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PTransition clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PUnExp.java b/src/main/java/org/sablecc/sablecc/node/PUnExp.java
index 28f0cba..202c349 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnExp.java
@@ -7,11 +7,6 @@ public abstract class PUnExp extends Node
     public PUnExp()
     {}
 
-    public PUnExp(PUnExp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PUnExp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/PUnOp.java b/src/main/java/org/sablecc/sablecc/node/PUnOp.java
index fc09a33..8df12aa 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnOp.java
@@ -7,11 +7,6 @@ public abstract class PUnOp extends Node
     public PUnOp()
     {}
 
-    public PUnOp(PUnOp node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract PUnOp clone();
 }
diff --git a/src/main/java/org/sablecc/sablecc/node/Start.java b/src/main/java/org/sablecc/sablecc/node/Start.java
index 751cb6f..a94f2e8 100644
--- a/src/main/java/org/sablecc/sablecc/node/Start.java
+++ b/src/main/java/org/sablecc/sablecc/node/Start.java
@@ -20,17 +20,14 @@ public final class Start extends Node
         setEOF(_eof_);
     }
 
-    public Start(Start node)
-    {
-        super(node);
-        setPGrammar(cloneNode(node._pGrammar_));
-        setEOF(cloneNode(node._eof_));
-    }
-
     @Override
     public Start clone()
     {
-        return new Start(this);
+        Start cloned = new Start();
+        cloned.setPGrammar(cloneNode(this._pGrammar_));
+        cloned.setEOF(cloneNode(this._eof_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TAbstract.java b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
index ba9a910..9eb16f4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TAbstract.java
+++ b/src/main/java/org/sablecc/sablecc/node/TAbstract.java
@@ -16,15 +16,12 @@ public final class TAbstract extends Token
         super("Abstract", line, pos);
     }
 
-    public TAbstract(TAbstract token)
-    {
-        super(token);
-    }
-
     @Override
     public TAbstract clone()
     {
-        return new TAbstract(this);
+        TAbstract cloned = new TAbstract(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TArrow.java b/src/main/java/org/sablecc/sablecc/node/TArrow.java
index 9a22211..e57d2dd 100644
--- a/src/main/java/org/sablecc/sablecc/node/TArrow.java
+++ b/src/main/java/org/sablecc/sablecc/node/TArrow.java
@@ -16,15 +16,12 @@ public final class TArrow extends Token
         super("->", line, pos);
     }
 
-    public TArrow(TArrow token)
-    {
-        super(token);
-    }
-
     @Override
     public TArrow clone()
     {
-        return new TArrow(this);
+        TArrow cloned = new TArrow(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TBar.java b/src/main/java/org/sablecc/sablecc/node/TBar.java
index 36d967f..a8a646b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBar.java
@@ -16,15 +16,12 @@ public final class TBar extends Token
         super("|", line, pos);
     }
 
-    public TBar(TBar token)
-    {
-        super(token);
-    }
-
     @Override
     public TBar clone()
     {
-        return new TBar(this);
+        TBar cloned = new TBar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TBlank.java b/src/main/java/org/sablecc/sablecc/node/TBlank.java
index de51cb9..c5d52b6 100644
--- a/src/main/java/org/sablecc/sablecc/node/TBlank.java
+++ b/src/main/java/org/sablecc/sablecc/node/TBlank.java
@@ -16,15 +16,12 @@ public final class TBlank extends Token
         super(text, line, pos);
     }
 
-    public TBlank(TBlank token)
-    {
-        super(token);
-    }
-
     @Override
     public TBlank clone()
     {
-        return new TBlank(this);
+        TBlank cloned = new TBlank(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TChar.java b/src/main/java/org/sablecc/sablecc/node/TChar.java
index aecb775..1a7cef3 100644
--- a/src/main/java/org/sablecc/sablecc/node/TChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TChar.java
@@ -16,15 +16,12 @@ public final class TChar extends Token
         super(text, line, pos);
     }
 
-    public TChar(TChar token)
-    {
-        super(token);
-    }
-
     @Override
     public TChar clone()
     {
-        return new TChar(this);
+        TChar cloned = new TChar(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TColon.java b/src/main/java/org/sablecc/sablecc/node/TColon.java
index 76e6ae6..34eb313 100644
--- a/src/main/java/org/sablecc/sablecc/node/TColon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TColon.java
@@ -16,15 +16,12 @@ public final class TColon extends Token
         super(":", line, pos);
     }
 
-    public TColon(TColon token)
-    {
-        super(token);
-    }
-
     @Override
     public TColon clone()
     {
-        return new TColon(this);
+        TColon cloned = new TColon(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TComma.java b/src/main/java/org/sablecc/sablecc/node/TComma.java
index 485b422..2f21c7d 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComma.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComma.java
@@ -16,15 +16,12 @@ public final class TComma extends Token
         super(",", line, pos);
     }
 
-    public TComma(TComma token)
-    {
-        super(token);
-    }
-
     @Override
     public TComma clone()
     {
-        return new TComma(this);
+        TComma cloned = new TComma(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TComment.java b/src/main/java/org/sablecc/sablecc/node/TComment.java
index 9f9f1a5..106474b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TComment.java
+++ b/src/main/java/org/sablecc/sablecc/node/TComment.java
@@ -16,15 +16,12 @@ public final class TComment extends Token
         super(text, line, pos);
     }
 
-    public TComment(TComment token)
-    {
-        super(token);
-    }
-
     @Override
     public TComment clone()
     {
-        return new TComment(this);
+        TComment cloned = new TComment(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TDDot.java b/src/main/java/org/sablecc/sablecc/node/TDDot.java
index 0c2dd1f..a3651ae 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDDot.java
@@ -16,15 +16,12 @@ public final class TDDot extends Token
         super("..", line, pos);
     }
 
-    public TDDot(TDDot token)
-    {
-        super(token);
-    }
-
     @Override
     public TDDot clone()
     {
-        return new TDDot(this);
+        TDDot cloned = new TDDot(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TDecChar.java b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
index 22104e3..5e7204f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDecChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDecChar.java
@@ -16,15 +16,12 @@ public final class TDecChar extends Token
         super(text, line, pos);
     }
 
-    public TDecChar(TDecChar token)
-    {
-        super(token);
-    }
-
     @Override
     public TDecChar clone()
     {
-        return new TDecChar(this);
+        TDecChar cloned = new TDecChar(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TDot.java b/src/main/java/org/sablecc/sablecc/node/TDot.java
index 394e43f..fae4247 100644
--- a/src/main/java/org/sablecc/sablecc/node/TDot.java
+++ b/src/main/java/org/sablecc/sablecc/node/TDot.java
@@ -16,15 +16,12 @@ public final class TDot extends Token
         super(".", line, pos);
     }
 
-    public TDot(TDot token)
-    {
-        super(token);
-    }
-
     @Override
     public TDot clone()
     {
-        return new TDot(this);
+        TDot cloned = new TDot(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TEqual.java b/src/main/java/org/sablecc/sablecc/node/TEqual.java
index c5b4c7c..ae88feb 100644
--- a/src/main/java/org/sablecc/sablecc/node/TEqual.java
+++ b/src/main/java/org/sablecc/sablecc/node/TEqual.java
@@ -16,15 +16,12 @@ public final class TEqual extends Token
         super("=", line, pos);
     }
 
-    public TEqual(TEqual token)
-    {
-        super(token);
-    }
-
     @Override
     public TEqual clone()
     {
-        return new TEqual(this);
+        TEqual cloned = new TEqual(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/THelpers.java b/src/main/java/org/sablecc/sablecc/node/THelpers.java
index 27b2966..9f75a08 100644
--- a/src/main/java/org/sablecc/sablecc/node/THelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/THelpers.java
@@ -16,15 +16,12 @@ public final class THelpers extends Token
         super("Helpers", line, pos);
     }
 
-    public THelpers(THelpers token)
-    {
-        super(token);
-    }
-
     @Override
     public THelpers clone()
     {
-        return new THelpers(this);
+        THelpers cloned = new THelpers(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/THexChar.java b/src/main/java/org/sablecc/sablecc/node/THexChar.java
index 2b09dc0..3f1273f 100644
--- a/src/main/java/org/sablecc/sablecc/node/THexChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/THexChar.java
@@ -16,15 +16,12 @@ public final class THexChar extends Token
         super(text, line, pos);
     }
 
-    public THexChar(THexChar token)
-    {
-        super(token);
-    }
-
     @Override
     public THexChar clone()
     {
-        return new THexChar(this);
+        THexChar cloned = new THexChar(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TId.java b/src/main/java/org/sablecc/sablecc/node/TId.java
index 4323e68..1919e49 100644
--- a/src/main/java/org/sablecc/sablecc/node/TId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TId.java
@@ -16,15 +16,12 @@ public final class TId extends Token
         super(text, line, pos);
     }
 
-    public TId(TId token)
-    {
-        super(token);
-    }
-
     @Override
     public TId clone()
     {
-        return new TId(this);
+        TId cloned = new TId(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TIgnored.java b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
index 3512dee..17d1413 100644
--- a/src/main/java/org/sablecc/sablecc/node/TIgnored.java
+++ b/src/main/java/org/sablecc/sablecc/node/TIgnored.java
@@ -16,15 +16,12 @@ public final class TIgnored extends Token
         super("Ignored", line, pos);
     }
 
-    public TIgnored(TIgnored token)
-    {
-        super(token);
-    }
-
     @Override
     public TIgnored clone()
     {
-        return new TIgnored(this);
+        TIgnored cloned = new TIgnored(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBkt.java b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
index 8e5a837..831576b 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBkt.java
@@ -16,15 +16,12 @@ public final class TLBkt extends Token
         super("[", line, pos);
     }
 
-    public TLBkt(TLBkt token)
-    {
-        super(token);
-    }
-
     @Override
     public TLBkt clone()
     {
-        return new TLBkt(this);
+        TLBkt cloned = new TLBkt(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TLBrace.java b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
index a3dcb15..0647fe8 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLBrace.java
@@ -16,15 +16,12 @@ public final class TLBrace extends Token
         super("{", line, pos);
     }
 
-    public TLBrace(TLBrace token)
-    {
-        super(token);
-    }
-
     @Override
     public TLBrace clone()
     {
-        return new TLBrace(this);
+        TLBrace cloned = new TLBrace(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TLPar.java b/src/main/java/org/sablecc/sablecc/node/TLPar.java
index 8ba1e87..3f4c1ab 100644
--- a/src/main/java/org/sablecc/sablecc/node/TLPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TLPar.java
@@ -16,15 +16,12 @@ public final class TLPar extends Token
         super("(", line, pos);
     }
 
-    public TLPar(TLPar token)
-    {
-        super(token);
-    }
-
     @Override
     public TLPar clone()
     {
-        return new TLPar(this);
+        TLPar cloned = new TLPar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TMinus.java b/src/main/java/org/sablecc/sablecc/node/TMinus.java
index 044d65c..65589ee 100644
--- a/src/main/java/org/sablecc/sablecc/node/TMinus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TMinus.java
@@ -16,15 +16,12 @@ public final class TMinus extends Token
         super("-", line, pos);
     }
 
-    public TMinus(TMinus token)
-    {
-        super(token);
-    }
-
     @Override
     public TMinus clone()
     {
-        return new TMinus(this);
+        TMinus cloned = new TMinus(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TNew.java b/src/main/java/org/sablecc/sablecc/node/TNew.java
index fcbcd30..38dff6e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNew.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNew.java
@@ -16,15 +16,12 @@ public final class TNew extends Token
         super("New", line, pos);
     }
 
-    public TNew(TNew token)
-    {
-        super(token);
-    }
-
     @Override
     public TNew clone()
     {
-        return new TNew(this);
+        TNew cloned = new TNew(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TNull.java b/src/main/java/org/sablecc/sablecc/node/TNull.java
index 47800bb..16042a4 100644
--- a/src/main/java/org/sablecc/sablecc/node/TNull.java
+++ b/src/main/java/org/sablecc/sablecc/node/TNull.java
@@ -16,15 +16,12 @@ public final class TNull extends Token
         super("Null", line, pos);
     }
 
-    public TNull(TNull token)
-    {
-        super(token);
-    }
-
     @Override
     public TNull clone()
     {
-        return new TNull(this);
+        TNull cloned = new TNull(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TPackage.java b/src/main/java/org/sablecc/sablecc/node/TPackage.java
index b2854d6..4b9ebe8 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPackage.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPackage.java
@@ -16,15 +16,12 @@ public final class TPackage extends Token
         super("Package", line, pos);
     }
 
-    public TPackage(TPackage token)
-    {
-        super(token);
-    }
-
     @Override
     public TPackage clone()
     {
-        return new TPackage(this);
+        TPackage cloned = new TPackage(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TPkgId.java b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
index 63fd17a..f156efe 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPkgId.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPkgId.java
@@ -16,15 +16,12 @@ public final class TPkgId extends Token
         super(text, line, pos);
     }
 
-    public TPkgId(TPkgId token)
-    {
-        super(token);
-    }
-
     @Override
     public TPkgId clone()
     {
-        return new TPkgId(this);
+        TPkgId cloned = new TPkgId(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TPlus.java b/src/main/java/org/sablecc/sablecc/node/TPlus.java
index 5098ea0..e12da0e 100644
--- a/src/main/java/org/sablecc/sablecc/node/TPlus.java
+++ b/src/main/java/org/sablecc/sablecc/node/TPlus.java
@@ -16,15 +16,12 @@ public final class TPlus extends Token
         super("+", line, pos);
     }
 
-    public TPlus(TPlus token)
-    {
-        super(token);
-    }
-
     @Override
     public TPlus clone()
     {
-        return new TPlus(this);
+        TPlus cloned = new TPlus(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
index 35a585f..e8a1615 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductionSpecifier.java
@@ -16,15 +16,12 @@ public final class TProductionSpecifier extends Token
         super("P", line, pos);
     }
 
-    public TProductionSpecifier(TProductionSpecifier token)
-    {
-        super(token);
-    }
-
     @Override
     public TProductionSpecifier clone()
     {
-        return new TProductionSpecifier(this);
+        TProductionSpecifier cloned = new TProductionSpecifier(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TProductions.java b/src/main/java/org/sablecc/sablecc/node/TProductions.java
index 7f402c3..246be7f 100644
--- a/src/main/java/org/sablecc/sablecc/node/TProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/TProductions.java
@@ -16,15 +16,12 @@ public final class TProductions extends Token
         super("Productions", line, pos);
     }
 
-    public TProductions(TProductions token)
-    {
-        super(token);
-    }
-
     @Override
     public TProductions clone()
     {
-        return new TProductions(this);
+        TProductions cloned = new TProductions(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TQMark.java b/src/main/java/org/sablecc/sablecc/node/TQMark.java
index aebf492..76b9f4d 100644
--- a/src/main/java/org/sablecc/sablecc/node/TQMark.java
+++ b/src/main/java/org/sablecc/sablecc/node/TQMark.java
@@ -16,15 +16,12 @@ public final class TQMark extends Token
         super("?", line, pos);
     }
 
-    public TQMark(TQMark token)
-    {
-        super(token);
-    }
-
     @Override
     public TQMark clone()
     {
-        return new TQMark(this);
+        TQMark cloned = new TQMark(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBkt.java b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
index 30552da..83aafaa 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBkt.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBkt.java
@@ -16,15 +16,12 @@ public final class TRBkt extends Token
         super("]", line, pos);
     }
 
-    public TRBkt(TRBkt token)
-    {
-        super(token);
-    }
-
     @Override
     public TRBkt clone()
     {
-        return new TRBkt(this);
+        TRBkt cloned = new TRBkt(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TRBrace.java b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
index 04be2a1..79868e2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRBrace.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRBrace.java
@@ -16,15 +16,12 @@ public final class TRBrace extends Token
         super("}", line, pos);
     }
 
-    public TRBrace(TRBrace token)
-    {
-        super(token);
-    }
-
     @Override
     public TRBrace clone()
     {
-        return new TRBrace(this);
+        TRBrace cloned = new TRBrace(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TRPar.java b/src/main/java/org/sablecc/sablecc/node/TRPar.java
index c797774..84445c2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TRPar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TRPar.java
@@ -16,15 +16,12 @@ public final class TRPar extends Token
         super(")", line, pos);
     }
 
-    public TRPar(TRPar token)
-    {
-        super(token);
-    }
-
     @Override
     public TRPar clone()
     {
-        return new TRPar(this);
+        TRPar cloned = new TRPar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
index 144ab07..92ebc84 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSemicolon.java
@@ -16,15 +16,12 @@ public final class TSemicolon extends Token
         super(";", line, pos);
     }
 
-    public TSemicolon(TSemicolon token)
-    {
-        super(token);
-    }
-
     @Override
     public TSemicolon clone()
     {
-        return new TSemicolon(this);
+        TSemicolon cloned = new TSemicolon(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TSlash.java b/src/main/java/org/sablecc/sablecc/node/TSlash.java
index 6b2fd73..91eccb8 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSlash.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSlash.java
@@ -16,15 +16,12 @@ public final class TSlash extends Token
         super("/", line, pos);
     }
 
-    public TSlash(TSlash token)
-    {
-        super(token);
-    }
-
     @Override
     public TSlash clone()
     {
-        return new TSlash(this);
+        TSlash cloned = new TSlash(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TStar.java b/src/main/java/org/sablecc/sablecc/node/TStar.java
index c683591..951f1b2 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStar.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStar.java
@@ -16,15 +16,12 @@ public final class TStar extends Token
         super("*", line, pos);
     }
 
-    public TStar(TStar token)
-    {
-        super(token);
-    }
-
     @Override
     public TStar clone()
     {
-        return new TStar(this);
+        TStar cloned = new TStar(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TStates.java b/src/main/java/org/sablecc/sablecc/node/TStates.java
index 45a75a7..44c82ac 100644
--- a/src/main/java/org/sablecc/sablecc/node/TStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/TStates.java
@@ -16,15 +16,12 @@ public final class TStates extends Token
         super("States", line, pos);
     }
 
-    public TStates(TStates token)
-    {
-        super(token);
-    }
-
     @Override
     public TStates clone()
     {
-        return new TStates(this);
+        TStates cloned = new TStates(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TString.java b/src/main/java/org/sablecc/sablecc/node/TString.java
index 452162e..c48a3a0 100644
--- a/src/main/java/org/sablecc/sablecc/node/TString.java
+++ b/src/main/java/org/sablecc/sablecc/node/TString.java
@@ -16,15 +16,12 @@ public final class TString extends Token
         super(text, line, pos);
     }
 
-    public TString(TString token)
-    {
-        super(token);
-    }
-
     @Override
     public TString clone()
     {
-        return new TString(this);
+        TString cloned = new TString(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TSyntax.java b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
index 4e7340f..daa3504 100644
--- a/src/main/java/org/sablecc/sablecc/node/TSyntax.java
+++ b/src/main/java/org/sablecc/sablecc/node/TSyntax.java
@@ -16,15 +16,12 @@ public final class TSyntax extends Token
         super("Syntax", line, pos);
     }
 
-    public TSyntax(TSyntax token)
-    {
-        super(token);
-    }
-
     @Override
     public TSyntax clone()
     {
-        return new TSyntax(this);
+        TSyntax cloned = new TSyntax(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
index b37b101..c58dcb7 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokenSpecifier.java
@@ -16,15 +16,12 @@ public final class TTokenSpecifier extends Token
         super("T", line, pos);
     }
 
-    public TTokenSpecifier(TTokenSpecifier token)
-    {
-        super(token);
-    }
-
     @Override
     public TTokenSpecifier clone()
     {
-        return new TTokenSpecifier(this);
+        TTokenSpecifier cloned = new TTokenSpecifier(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TTokens.java b/src/main/java/org/sablecc/sablecc/node/TTokens.java
index fac6c7a..3234e79 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTokens.java
@@ -16,15 +16,12 @@ public final class TTokens extends Token
         super("Tokens", line, pos);
     }
 
-    public TTokens(TTokens token)
-    {
-        super(token);
-    }
-
     @Override
     public TTokens clone()
     {
-        return new TTokens(this);
+        TTokens cloned = new TTokens(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/TTree.java b/src/main/java/org/sablecc/sablecc/node/TTree.java
index 91100d3..e101e44 100644
--- a/src/main/java/org/sablecc/sablecc/node/TTree.java
+++ b/src/main/java/org/sablecc/sablecc/node/TTree.java
@@ -16,15 +16,12 @@ public final class TTree extends Token
         super("Tree", line, pos);
     }
 
-    public TTree(TTree token)
-    {
-        super(token);
-    }
-
     @Override
     public TTree clone()
     {
-        return new TTree(this);
+        TTree cloned = new TTree(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/java/org/sablecc/sablecc/node/Token.java b/src/main/java/org/sablecc/sablecc/node/Token.java
index 628077f..57c3cfd 100644
--- a/src/main/java/org/sablecc/sablecc/node/Token.java
+++ b/src/main/java/org/sablecc/sablecc/node/Token.java
@@ -25,15 +25,7 @@ public abstract class Token extends Node implements IToken
 
     protected Token()
     {
-        this((String)null);
-    }
-
-    protected Token(Token token)
-    {
-        super(token);
-        this.text = token.text;
-        this.line = token.line;
-        this.pos = token.pos;
+        this(null);
     }
 
     @Override
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index 3dd2fc3..bb0c56f 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -79,29 +79,26 @@ $
 
 Macro:CloneHeader
 
-    public $0$($0$ node)
+    @Override
+    public $0$ clone()
     {
-        super(node);
+        $0$ cloned = new $0$();
 
 $
 
 Macro:CloneBodyNode
-        set$0$(cloneNode(node._$1$_));
+        cloned.set$0$(cloneNode(this._$1$_));
 
 $
 
 Macro:CloneBodyList
-        set$0$(cloneList(node._$1$_));
+        cloned.set$0$(cloneList(this._$1$_));
 
 $
 
 Macro:CloneTail
-    }
-
-    @Override
-    public $0$ clone()
-    {
-        return new $0$(this);
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
 $
diff --git a/src/main/resources/org/sablecc/sablecc/productions.txt b/src/main/resources/org/sablecc/sablecc/productions.txt
index 2957990..fc84157 100644
--- a/src/main/resources/org/sablecc/sablecc/productions.txt
+++ b/src/main/resources/org/sablecc/sablecc/productions.txt
@@ -15,11 +15,6 @@ public abstract class $1$ extends Node
     public $1$()
     {}
 
-    public $1$($1$ node)
-    {
-        super(node);
-    }
-
     @Override
     public abstract $1$ clone();
 }
diff --git a/src/main/resources/org/sablecc/sablecc/tokens.txt b/src/main/resources/org/sablecc/sablecc/tokens.txt
index ce4cfbc..4cf4f70 100644
--- a/src/main/resources/org/sablecc/sablecc/tokens.txt
+++ b/src/main/resources/org/sablecc/sablecc/tokens.txt
@@ -24,15 +24,12 @@ public final class $1$ extends Token
         super(text, line, pos);
     }
 
-    public $1$($1$ token)
-    {
-        super(token);
-    }
-
     @Override
     public $1$ clone()
     {
-        return new $1$(this);
+        $1$ cloned = new $1$(this.getText(), this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
@@ -63,15 +60,12 @@ public final class $1$ extends Token
         super("$2$", line, pos);
     }
 
-    public $1$($1$ token)
-    {
-        super(token);
-    }
-
     @Override
     public $1$ clone()
     {
-        return new $1$(this);
+        $1$ cloned = new $1$(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
diff --git a/src/main/resources/org/sablecc/sablecc/utils.txt b/src/main/resources/org/sablecc/sablecc/utils.txt
index b66f883..81ccc43 100644
--- a/src/main/resources/org/sablecc/sablecc/utils.txt
+++ b/src/main/resources/org/sablecc/sablecc/utils.txt
@@ -28,17 +28,14 @@ public final class Start extends Node
         setEOF(_eof_);
     }
 
-    public Start(Start node)
-    {
-        super(node);
-        set$1$(cloneNode(node._$2$_));
-        setEOF(cloneNode(node._eof_));
-    }
-
     @Override
     public Start clone()
     {
-        return new Start(this);
+        Start cloned = new Start();
+        cloned.set$1$(cloneNode(this._$2$_));
+        cloned.setEOF(cloneNode(this._eof_));
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
@@ -163,15 +160,12 @@ public final class EOF extends Token
         super("", line, pos);
     }
 
-    public EOF(EOF token)
-    {
-        super(token);
-    }
-
     @Override
     public EOF clone()
     {
-        return new EOF(this);
+        EOF cloned = new EOF(this.getLine(), this.getPos());
+        cloned.initSourcePositionsFrom(this);
+        return cloned;
     }
 
     @Override
@@ -211,15 +205,7 @@ public abstract class Token extends Node implements IToken
 
     protected Token()
     {
-        this((String)null);
-    }
-
-    protected Token(Token token)
-    {
-        super(token);
-        this.text = token.text;
-        this.line = token.line;
-        this.pos = token.pos;
+        this(null);
     }
 
     @Override
@@ -334,14 +320,8 @@ public abstract class Node extends PositionedNode implements Switchable, Cloneab
     protected Node()
     {}
 
-    protected Node(Node node)
-    {
-        super(node);
-        // Copy constructor intentionally does not keep parent!
-        // The new copied node is not a child of the original parent anymore.
-        this.parent = null;
-    }
-
+    // clone intentionally does not keep parent!
+    // The new copied node is not a child of the original parent anymore.
     @Override
     public abstract Node clone();
 
-- 
GitLab