diff --git a/python_arborist.py b/python_arborist.py
index 9ac7e97905ede63131bfa1cd52e5d30f66c599ce..962174cbdd49942f234f603b648a3fdab5b77d49 100644
--- a/python_arborist.py
+++ b/python_arborist.py
@@ -245,6 +245,29 @@ class Cirno(Elaboratable):
 
 
 
+tokens ={
+"BOTTOM": 0x5a00,
+"ENDOFPARSE": 0x5500,
+"EXPRESSION": 0xEE00,
+"TERM": 0xE700,
+"FACTOR": 0xEF00,
+"INTEGER": 0xE100,
+
+"OPENPAREN": 0xCA00,
+"CLOSEPAREN": 0xCB00,
+"ADDOP"      : 0xAA00,
+"MULTOP"      : 0xAB00,
+"STDMASK"     : 0xff00
+}
+
+revmap = {v: k for k, v in tokens.items()}
+
+print(revmap)
+
+def hex_to_name(x):
+    return revmap[x]
+
+
 BOTTOM      = 0x5a00
 ENDOFPARSE  = 0x5500
 
@@ -260,7 +283,6 @@ ADDOP       = 0xAA00
 MULTOP      = 0xAB00
 STDMASK     = 0xff00
 
-
 rules = [
          (EXPRESSION, [EXPRESSION, ADDOP,      TERM      ]),
          (EXPRESSION, [TERM                                              ]),
@@ -279,7 +301,6 @@ cooked_rules = z.preprocessor()
 parse_me =  z.Gzero_shimmed(EXPRESSION, 7)
 parse_me.append(ENDOFPARSE)
 
-print("XXXXXXXXXXXXXXX",parse_me)
 
 
 
@@ -289,14 +310,14 @@ class TreeNode:
         self.subnodes = subnodes
 
     def __str__(self):
-        return str(self.language_element) + str(self.subnodes)
+        return str(hex_to_name(self.language_element)) + str(self.subnodes)
 
 
 def walk_the_tree(tree, level = 1):
     if tree == None:
         return
 
-    print("    " * (level -1) + "|---" + hex(tree.language_element) + " with " + str(len(tree.subnodes)) + " subnodes")
+    print("    " * (level -1) + "|---" + hex_to_name(tree.language_element) + " with " + str(len(tree.subnodes)) + " subnodes")
     for subnode in tree.subnodes:
         walk_the_tree(subnode, level + 1)
 
@@ -410,4 +431,6 @@ def deserializer(serialized_array):
 the_tree = deserializer(serialized_tree_final)
 print(the_tree)
 
-walk_the_tree(the_tree)
\ No newline at end of file
+walk_the_tree(the_tree)
+
+print("THE ORIGINAL WAS", [hex_to_name(x) for x in parse_me])