Exemplo n.º 1
0
def miOutput(quadr, i):
    resDir = tieneDireccion(quadr.result)
    if str(type(memo.getValor(resDir, None))) == "<class 'str'>":
        valor = memo.getValor(resDir, None).replace('"', '')
        print(valor)
    else:
        print(memo.getValor(resDir, None))
    return i + 1
Exemplo n.º 2
0
def mult(quadr, i):
    left_op = tieneDireccion(quadr.left_operand)
    right_op = tieneDireccion(quadr.right_operand)
    if right_op < 5000:
        res = memo.getValor(left_op, None) * right_op
    else:
        res = memo.getValor(left_op, None) * memo.getValor(right_op, None)
    memo.updateLocalInMemory(res, quadr.result)
    return i + 1
Exemplo n.º 3
0
def gotof(quadr, i):
    left_op = tieneDireccion(quadr.left_operand)
    value = memo.getValor(left_op, None)
    if value == 'false' or value is False:
        return quadr.result
    else:
        return i + 1
Exemplo n.º 4
0
def plus(quadr, i):
    global esArreglo
    global contVer
    left_op = tieneDireccion(quadr.left_operand)
    right_op = tieneDireccion(quadr.right_operand)
    if right_op == 0:
        esArreglo = True
    if esArreglo:
        res = memo.getValor(left_op, None) + quadr.right_operand
        contVer += 1
    else:
        res = memo.getValor(left_op, None) + memo.getValor(right_op, None)
    memo.updateLocalInMemory(res, quadr.result)
    if contVer >= 2:
        esArreglo = False
    return i + 1
Exemplo n.º 5
0
def miReturn(quadr, i):
    global funcNo
    global miFunc
    regresa = tieneDireccion(quadr.result)
    valor = memo.getValor(regresa, None)
    memo.insertReturn(valor)
    funcNo.remove(miFunc)
    if funcNo.count(miFunc) <= 0:
        for id in master.simbolos[miFunc].value:
            if id != "PARAMCANTI" and id != "Cuadruplos":
                direccion = master.simbolos[miFunc].value[id].direccion
                matriz = master.simbolos[miFunc].value[id].matriz
                dimension = master.simbolos[miFunc].value[id].dimensionada
                tipo = memo.getTipoViaDireccion(direccion)
                if dimension > 0 and matriz == 0:
                    memo.deleteVectoInExe(direccion, dimension, tipo)
                elif dimension > 0 and matriz > 0:
                    tam = dimension * matriz
                    memo.deleteVectoInExe(direccion, tam, tipo)
                else:
                    if tipo == "int":
                        memo.memoria_local.integers.pop(direccion)
                    if tipo == "float":
                        memo.memoria_local.float.pop(direccion)
                    if tipo == "string":
                        memo.memoria_local.string.pop(direccion)
                    if tipo == "bool":
                        memo.memoria_local.booleanos.pop(direccion)
        return primerQuadNo + 1
    return quadNo + 1
Exemplo n.º 6
0
def tieneDireccion(operand):
    operand = str(operand)
    if operand[0] == '(':
        newOp = operand[1:len(operand) - 1]
        newOp = int(newOp)
        dir = memo.getValor(newOp, None)
        return dir
    else:
        return int(operand)
Exemplo n.º 7
0
def param(quadr, i):
    global dir_param
    global tipo_param
    valor = memo.getValor(quadr.left_operand, None)
    memo.insertLocalInMemory(tipo_param[-1], dir_param[-1])
    memo.updateLocalInMemory(valor, dir_param[-1])
    dir_param.pop()
    tipo_param.pop()
    return i + 1
Exemplo n.º 8
0
def ver(quadr, i):
    global esArreglo
    global contVer
    left_op = tieneDireccion(quadr.left_operand)
    verifica = memo.getValor(left_op, None)
    if verifica >= 0 and verifica <= quadr.result:
        contVer = 0
        return i + 1
    else:
        print("ERROR: Índice fuera de rango.")
        sys.exit()
Exemplo n.º 9
0
def orOp(quadr, i):
    left_op = tieneDireccion(quadr.left_operand)
    right_op = tieneDireccion(quadr.right_operand)
    res = memo.getValor(left_op, None) or memo.getValor(right_op, None)
    memo.updateLocalInMemory(res, quadr.result)
    return i + 1
Exemplo n.º 10
0
def assign(quadr, i):
    left_op = tieneDireccion(quadr.left_operand)
    resDir = tieneDireccion(quadr.result)
    res = memo.getValor(left_op, None)
    memo.updateLocalInMemory(res, resDir)
    return i + 1