diff --git a/src/main/java/org/sablecc/sablecc/node/PAlt.java b/src/main/java/org/sablecc/sablecc/node/PAlt.java
index cdd9a4a1b3b768fa2d342c892091d87ac6d02948..0b5516f2b2bc641a5aa78d0f2de25da0092a9578 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAlt.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PAlt extends Node
 {
-    // Empty body
+    @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 88fa1313d9489b43ac4b2b96091e49d145a19167..35b5362309960485747bcbb60e22e686ce1e1446 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAltTransform.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PAltTransform extends Node
 {
-    // Empty body
+    @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 a452a4011af0531bdfaf2688801f08aae6908545..ef1f009c8880a27ca872b421d0837252efc01b6f 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAst.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PAst extends Node
 {
-    // Empty body
+    @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 55198fca62bba5b9d23ea5fe7fd04665c5a7cad2..4dc2c2b41b47aa73c2e6c86bc8276021407ca744 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstAlt.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PAstAlt extends Node
 {
-    // Empty body
+    @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 e1953d36a707b6e99a61d61121f70015ba9ab42f..6b85532aa34d023487b21e5e27d41dd15772d1d6 100644
--- a/src/main/java/org/sablecc/sablecc/node/PAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PAstProd.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PAstProd extends Node
 {
-    // Empty body
+    @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 8059acc32259601153011c646ccabf0f91c0b9c7..70bcd901cb304d1d8a9f5555cf38b23f483985f8 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBasic.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBasic.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PBasic extends Node
 {
-    // Empty body
+    @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 002602c74337b2408c78de9082cfa68ac66da563..2b2e9ef558f69770ee3fb8e4699ba08136bdef9e 100644
--- a/src/main/java/org/sablecc/sablecc/node/PBinOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PBinOp.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PBinOp extends Node
 {
-    // Empty body
+    @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 d78fe0f94822488633eeb955bf51295e1fba0434..bf0fc3ca59f2c1d0456d69f07b7315b23574bf33 100644
--- a/src/main/java/org/sablecc/sablecc/node/PChar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PChar.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PChar extends Node
 {
-    // Empty body
+    @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 773b2158e201258b76ce8a98f3cb96d4c3840586..c5c9870169d0bd4fb6d6d80d81c3a569a811d450 100644
--- a/src/main/java/org/sablecc/sablecc/node/PConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/PConcat.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PConcat extends Node
 {
-    // Empty body
+    @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 f456e5c8cba040e360555d20403607587a450bd2..9ead0491725ce0ba30b66aba9e32d9b815e8dabc 100644
--- a/src/main/java/org/sablecc/sablecc/node/PElem.java
+++ b/src/main/java/org/sablecc/sablecc/node/PElem.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PElem extends Node
 {
-    // Empty body
+    @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 39cba9b4fb06b8370b83648e1b7b45dbe470cb9b..3609b3d84cf42d5d18d841074b92ed8ed4d1b4b9 100644
--- a/src/main/java/org/sablecc/sablecc/node/PGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/PGrammar.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PGrammar extends Node
 {
-    // Empty body
+    @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 45fd6fa46af48bde49482af6f3a4ee68de3e887f..3c73a8c632e17ee2568cc7e7a53c46fd887db926 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelperDef.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PHelperDef extends Node
 {
-    // Empty body
+    @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 a97168f74f5cfb79d2567375098745d10b48529f..66e7c21fb23d9ac7153f2a198a02ecd96d1ef482 100644
--- a/src/main/java/org/sablecc/sablecc/node/PHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/PHelpers.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PHelpers extends Node
 {
-    // Empty body
+    @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 b2a6876ee472284dd08bd6531f02e5a5e8875268..5af522344619ba29d0cde1876d4a869adb97b197 100644
--- a/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PIgnTokens.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PIgnTokens extends Node
 {
-    // Empty body
+    @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 52a45c0bbab0d4f73c91adfa9250858a6ac1d26a..da5bde57ca851d921c69874cffe3dc462f7b61ec 100644
--- a/src/main/java/org/sablecc/sablecc/node/PListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PListTerm.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PListTerm extends Node
 {
-    // Empty body
+    @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 9a08cf828fb79e5bba4f0bae804bcd678281b8e2..5eae94a3e0016f63abafc7ae5cb04aa437a70189 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProd.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PProd extends Node
 {
-    // Empty body
+    @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 437a52a6be8d594cdf79668859906da35d3b1969..eff659cd238b1c6e7791f18c99e0864137301492 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProdName.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProdName.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PProdName extends Node
 {
-    // Empty body
+    @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 0a61e72f5c78ac966d541e6ee5fdc8822f28f6a8..f12d223382bd8169b2a306d5d2e2d327cf97f2a1 100644
--- a/src/main/java/org/sablecc/sablecc/node/PProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/PProductions.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PProductions extends Node
 {
-    // Empty body
+    @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 e3f7a6ea8c24b08c193a7874e02bfe343940edf6..c9ae46786bcf2fd868d62fcb35135e4ec192fe58 100644
--- a/src/main/java/org/sablecc/sablecc/node/PRegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PRegExp.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PRegExp extends Node
 {
-    // Empty body
+    @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 91668ff7b17baa0d45d29985de866e693a6c9140..5d2b31e19a1b696a18c9d2d3cf5e60c251d34dd3 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSet.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSet.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PSet extends Node
 {
-    // Empty body
+    @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 ec0fcdcac751a5d9856b47cfcd3353ae2eaccab9..787ba31bd818ef02ce17579ca9d9b1f03006a8b0 100644
--- a/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
+++ b/src/main/java/org/sablecc/sablecc/node/PSpecifier.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PSpecifier extends Node
 {
-    // Empty body
+    @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 5ca56fe3dcaa924d147a7b255e52285fb4838d44..24b52b2922f3df81d2339a98b9d989b21936bc74 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateList.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PStateList extends Node
 {
-    // Empty body
+    @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 bc7de2f0fc933611fd0cdc7005ae59f8654dc907..b50809e8856ab3014bf075334974eddfdfe6f1f9 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStateListTail.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PStateListTail extends Node
 {
-    // Empty body
+    @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 d494b18b4ec3e4a44973d3ccd55fbd549c5095bd..df9262739243cd81a9192efe6f1226a9c6c83524 100644
--- a/src/main/java/org/sablecc/sablecc/node/PStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/PStates.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PStates extends Node
 {
-    // Empty body
+    @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 4deeffc5e767198e6588fa48128b4be1d449e827..cea2601f5e95197ae9b1f760517e10752992b1ec 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTerm.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PTerm extends Node
 {
-    // Empty body
+    @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 1c66c9035dcd7bd769c4f58a16eb9a07bcaf1a58..96e71a7ba2fa0d1665dae4d7ee6d6a25b5260cce 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokenDef.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PTokenDef extends Node
 {
-    // Empty body
+    @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 4e0aa2698b81b86beef6244e115cc72b1a9150bd..daa2a57e8f076900af7609ad609fad40b965f79a 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTokens.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PTokens extends Node
 {
-    // Empty body
+    @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 ef0f1f4959feb59fa2fd492ef1ac4844ad4d37d8..e91c82d6d249542627448da88cea1e5013603859 100644
--- a/src/main/java/org/sablecc/sablecc/node/PTransition.java
+++ b/src/main/java/org/sablecc/sablecc/node/PTransition.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PTransition extends Node
 {
-    // Empty body
+    @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 aad69b0bd27ced82c7aceacf32baf9f118e84343..1561ea6923bda990350cf8c2a65bed146b2a549a 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnExp.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PUnExp extends Node
 {
-    // Empty body
+    @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 de0324755c145d19bb97c5f2d8f04ade0f80637d..45a73f93c9a544796e7e7a114247129bda23537c 100644
--- a/src/main/java/org/sablecc/sablecc/node/PUnOp.java
+++ b/src/main/java/org/sablecc/sablecc/node/PUnOp.java
@@ -4,5 +4,6 @@ package org.sablecc.sablecc.node;
 
 public abstract class PUnOp extends Node
 {
-    // Empty body
+    @Override
+    public abstract PUnOp clone();
 }
diff --git a/src/main/resources/org/sablecc/sablecc/productions.txt b/src/main/resources/org/sablecc/sablecc/productions.txt
index fae62410dd4386b3fc67323cef33c10df578324a..061f218ab7970dbb73e8b6642ccd7469f9832645 100644
--- a/src/main/resources/org/sablecc/sablecc/productions.txt
+++ b/src/main/resources/org/sablecc/sablecc/productions.txt
@@ -12,7 +12,8 @@ package $0$;
 
 public abstract class $1$ extends Node
 {
-    // Empty body
+    @Override
+    public abstract $1$ clone();
 }
 
 $