Example #1
0
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)
Example #2
0
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("", "", "")))
Example #3
0
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("", "", "")))
Example #4
0
#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()