From 3eb0b50d26e63bedea07cd134345f76d15035203 Mon Sep 17 00:00:00 2001
From: Kia <kia@special-circumstanc.es>
Date: Sat, 30 May 2020 16:08:06 -0600
Subject: [PATCH] further work on deserializing the parse tree, including
 physical->logical index conversion

---
 python_arborist.py | 51 ++++++++++++++++++++++++++++++++++++----------
 1 file changed, 40 insertions(+), 11 deletions(-)

diff --git a/python_arborist.py b/python_arborist.py
index b72e820..8485a5e 100644
--- a/python_arborist.py
+++ b/python_arborist.py
@@ -309,22 +309,47 @@ print(serialized_tree_final)
 
 top_bit = 0x1000
 
+
 def deserializer(serialized_array):
-    idx = 0
-    while (idx < len(serialized_array)):
-        new_element     = serialized_array[idx]
-        number_subnodes = serialized_array[idx + 1]
+    list_of_nodes = []
+    physical_to_logical = {}
+    physical_idx = 0
+    logical_idx  = 0
+    while (physical_idx < 53): #len(serialized_array)):
+        new_element     = serialized_array[physical_idx]
+        print("NEW ELEMENT IS:", new_element)
+        number_subnodes = serialized_array[physical_idx + 1]
+        print("    WITH", number_subnodes, "SUBNODES")
         if (number_subnodes < 1):
-            print("MALFORMED AT IDX", idx)
+            print("")
+            print("MALFORMED AT IDX", physical_idx)
             print("TOTAL LEN OF ARRAY IS", len(serialized_array))
             break
 
         subnodes_array = []
-        for sub_idx in range(idx + 2, idx + 2 + number_subnodes):
-            subnodes_array.append(serialized_array[sub_idx])
+        for sub_idx in range(physical_idx + 2, physical_idx + 2 + number_subnodes):
+            if (serialized_array[sub_idx] & top_bit != 0): # index reference
+                backreference_physical_index = serialized_array[sub_idx] - top_bit
+                print("        BACKREFERENCE_INDEX IS", backreference_physical_index)
+
+                #this_subnode = list_of_nodes[serialized_array]
+                subnodes_array.append(serialized_array[sub_idx])
+            else:                                          # new subnode altogether
+                print("        ABINITIO SUBNODE IS", serialized_array[sub_idx])
+                subnodes_array.append(serialized_array[sub_idx])
+
+
+        print("        AND THESE SUBNODES ARE:",subnodes_array)
+        print("")
+
+        new_node = TreeNode(new_element, subnodes_array)
+        physical_to_logical[physical_idx] = logical_idx
+        physical_idx += 2 + number_subnodes
+        logical_idx  += 1
+    print(physical_to_logical)
+
+    return new_node
 
-        print("NEW SUBNODES ARE:",subnodes_array)
-        idx += 2 + number_subnodes
 
 
 
@@ -334,5 +359,9 @@ class TreeNode:
         self.subnodes = subnodes
 
     def __str__(self):
-        return str(self.language_element)
-deserializer(serialized_tree_final)
\ No newline at end of file
+        return str(self.language_element) + str(self.subnodes)
+
+
+
+the_tree = deserializer(serialized_tree_final)
+print(the_tree)
\ No newline at end of file
-- 
GitLab