aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-11-23 12:10:54 -0600
committerIván Ávalos <avalos@disroot.org>2022-11-23 12:10:54 -0600
commit02e70483ad490b83118ea43770c995c61ffa4ce7 (patch)
tree0b0be4a69a7f58cda17e6f281263c3f2ad5cc0fa
parentf6b89fb8abcc613277f2faa8b1a462234151a346 (diff)
downloadjavanol-02e70483ad490b83118ea43770c995c61ffa4ce7.tar.gz
javanol-02e70483ad490b83118ea43770c995c61ffa4ce7.tar.bz2
javanol-02e70483ad490b83118ea43770c995c61ffa4ce7.zip
Se añade función para renderizar árbol
-rw-r--r--compilador/arbol.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/compilador/arbol.py b/compilador/arbol.py
index 7abcbe0..234d2e9 100644
--- a/compilador/arbol.py
+++ b/compilador/arbol.py
@@ -1,3 +1,7 @@
+import uuid, json
+import graphviz as gv
+from pprint import pformat
+
class Nodo:
def __init__(self, dato = None):
self.dato = dato
@@ -12,6 +16,16 @@ class Nodo:
s += "\n"
return s
+ def render(self, dot: gv.Digraph, parent: str):
+ name = uuid.uuid1().hex
+ fdato = pformat(self.dato, indent=2).replace('\n', '\l')
+ dot.node(name, fdato)
+ if parent:
+ dot.edge(parent, name)
+
+ for h in self.hijos:
+ h.render(dot, name)
+
def __str__(self):
return self.print()
@@ -20,6 +34,13 @@ class Arbol:
def __init__(self, raiz: Nodo = Nodo()):
self.raiz = raiz
+ def render(self, filename, view = False):
+ dot = gv.Digraph()
+ dot.attr(rankdir='LR')
+ dot.attr('node', fontname='monospace')
+ self.raiz.render(dot, None)
+ dot.render(filename, view = view)
+
def __str__(self):
if self.raiz:
return str(self.raiz)