def pretty_print_map(map_id: str, render_text: bool = "False") -> None: try: root = Mindmap_dto.load(map_id) except Exception as e: return f"ERROR: mindmap {map_id} does not exist!" pretty_print = [] for pre, _, node in RenderTree(root, style=AbstractStyle(u' ', u' ', u' ')): text = '' if render_text and len(node.text) > 0: text = ' \t\t--> ' + node.text pretty_print.append(f"{pre}{node.name}/{text}") return '\n'.join(pretty_print)
def recorridoPosValor(mainNode): permitidos = [ "ID", "EXP", "EXPSIMP", "TERM", "FACT", "REAL", "ENTERO", "OP", "ASSIGN", "REL", "COUT" ] for node in PostOrderIter(mainNode): if (permitidos.__contains__(node.tipo) and node.parent): if (node.parent.tipo != "ListVar"): #Trae el valor que tiene en tabla if node.tipo != "ENTERO" and node.tipo != "REAL" and node.tipo != "OP" and node.tipo != "ASSIGN" and node.tipo != "REL" and node.tipo != "COUT": node.value = regresar(node.nombre) node.evaluar = 1 if node.evaluar == 2: if node.tipo == "ASSIGN": if regTipo(node.nombre) == "real": node.value = float(node.leftchild) else: node.value = node.leftchild instValue(node) elif node.tipo == "OP": if (node.nombre == '+'): node.value = parser(node.leftchild) + parser( node.rightchild) elif (node.nombre == '*'): if isinstance(parser(node.leftchild), int) and isinstance( parser(node.rightchild), int): #if(node.type=="int"): node.value = int( parser(node.leftchild) * parser(node.rightchild)) else: node.value = parser(node.leftchild) * parser( node.rightchild) elif (node.nombre == '/'): if ((node.rightchild == '0') or (node.rightchild == 0)): archivoSem = open(nombreSem, "a") archivoSem.write( "Division entre cero en linea: " + str(node.linea) + "\n") archivoSem.close() node.value = 0 else: if isinstance(parser( node.leftchild), int) and isinstance( parser(node.rightchild), int): #if(node.type=="int"): node.value = int( parser(node.leftchild) / parser(node.rightchild)) else: node.value = parser( node.leftchild) / parser( node.rightchild) elif (node.nombre == '-'): node.value = parser(node.leftchild) - parser( node.rightchild) elif node.tipo == "COUT": node.value = node.leftchild elif node.tipo == "REL": if node.nombre == "!=": if node.leftchild != node.rightchild: node.value = 1 else: node.value = 0 elif node.nombre == "==": if node.leftchild == node.rightchild: node.value = 1 else: node.value = 0 elif node.nombre == ">=": if node.leftchild >= node.rightchild: node.value = 1 else: node.value = 0 elif node.nombre == "<=": if node.leftchild <= node.rightchild: node.value = 1 else: node.value = 0 elif node.nombre == "<": if node.leftchild < node.rightchild: node.value = 1 else: node.value = 0 elif node.nombre == '>': if node.leftchild > node.rightchild: node.value = 1 else: node.value = 0 if not node.siblings and node.parent.evaluar != 2: node.parent.leftchild = node.value node.parent.evaluar = 2 if node.parent.evaluar == 0: node.parent.leftchild = node.value node.parent.evaluar = 1 elif node.parent.evaluar == 1: node.parent.rightchild = node.value node.parent.evaluar = 2 print(RenderTree(mainNode, style=AbstractStyle("", "", "")))
def cleanTree(nodo): for node in PostOrderIter(nodo): #if(nodo.is_leaf ): node.name += " Tipo= " + node.type + " Valor= " + str( node.value) print(RenderTree(nodo, style=AbstractStyle("", "", "")))
#FIN generador codigo intermedio nodo = principalMain(S_PROGRAMA) recorridoPosTipo(nodo) recorridoPreTipo(nodo) print("VALUE") insertar(nodo, nombreSem) recorridoPosValor(nodo) #Generador codigo intermedio generator(nodo.children[1]) #FIN generador codigo intermedio imprimirTabla(nombreTabla) print("Clean") cleanTree(nodo) arbolito = RenderTree(nodo, style=AbstractStyle("", "", "")) archivoArbol.write( str(arbolito).replace("MyNode('", "").replace("')", "").replace("\'", "").replace(")", "")) archivoArbol.close() archivo.close() archivoError.close() archivoMachine.close()