Beispiel #1
0
def pruebaTabla():
    te = collections.deque()
    tabla = TablaSimbolos.TablaSimbolos(None, "main")
    print(tabla)


#pruebaTabla()
def interpretar(AST, consola, salidaSimbolos):
    global ts
    ts = None
    ts = TablaSimbolos()
    global errores
    errores = consola.toPlainText()

    if AST.main != None: 
        ts.agregar(AST.main.name, AST.main.name, TIPO_RELATIVO.LABEL, TIPO_ESPECIFICO.MAIN, AST.main.instructions)

    for label in AST.labels:
        ts.agregar(label.name, label.name, TIPO_RELATIVO.LABEL, None,  label.instructions)
    
    flag1 = False
    flag2 = False
    labeles = [AST.main] + AST.labels
    for label in labeles:
        for instruction in label.instructions:
            if isinstance(instruction, Set):
                if instruction.register.type_ == REGISTER.PARAM:
                    flag1 = True
            elif isinstance(instruction, Goto):
                goto = ts.obtener(instruction.label)
                if goto != None:
                    if goto.tipo_especifico == None:
                        for instr in goto.valor:
                            if isinstance(instr, Set):
                                if instr.register.type_ == REGISTER.DEVUELTO:
                                    flag2 = True

                        if flag2:
                            ts.asignarLabelType(instruction.label, TIPO_ESPECIFICO.FUNCION)
                        elif flag1:
                            ts.asignarLabelType(instruction.label, TIPO_ESPECIFICO.PROCEDIMIENTO)
                        else:
                            ts.asignarLabelType(instruction.label, TIPO_ESPECIFICO.CONTROL)

                        flag1 = False
                        flag2 = False
            elif isinstance(instruction, If):
                gotoIf = instruction.goto
                goto = ts.obtener(gotoIf.label)
                if goto != None:
                    if goto.tipo_especifico == None:
                        for instr in goto.valor:
                            if isinstance(instr, Set):
                                if instr.register.type_ == REGISTER.DEVUELTO:
                                    flag2 = True

                        if flag2:
                            ts.asignarLabelType(gotoIf.label, TIPO_ESPECIFICO.FUNCION)
                        elif flag1:
                            ts.asignarLabelType(gotoIf.label, TIPO_ESPECIFICO.PROCEDIMIENTO)
                        else:
                            ts.asignarLabelType(gotoIf.label, TIPO_ESPECIFICO.CONTROL)

                        flag1 = False
                        flag2 = False
    


    i_main(AST.main, consola)
    ts.graph(salidaSimbolos)
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from Instructions import * 
from TablaSimbolos import *


ts = TablaSimbolos()
flag = True 
errores = ''

def parar():
    global flag
    flag = False

def continuar():
    global flag 
    flag = True

def addError(texto, consola):
    global errores
    prints = consola.toPlainText()[len(errores):]
    errores += texto
    consola.setText(errores + prints)

def interpretar(AST, consola, salidaSimbolos):
    global ts
    ts = None
    ts = TablaSimbolos()
    global errores
    errores = consola.toPlainText()