Exemplo n.º 1
0
def era(quadr, i):
    global dir_param
    global tipo_param
    global dirReturn
    global funcNo
    global esPrimera
    global miFunc
    miFunc = quadr.result
    funcNo.append(quadr.result)
    if funcNo.count(quadr.result) == 1:
        esPrimera = True
    for id in master.simbolos[quadr.result].value:
        if id != "PARAMCANTI" and id != 'Cuadruplos':
            dimension = master.simbolos[quadr.result].value[id].dimensionada
            tipo = master.simbolos[quadr.result].value[id].type_data
            direccion = master.simbolos[quadr.result].value[id].direccion
            matriz = master.simbolos[quadr.result].value[id].matriz
            if master.simbolos[quadr.result].value[id].param:
                dir_param.append(direccion)
                tipo_param.append(tipo)
            if id == 'return':
                dirReturn = direccion
            if not master.simbolos[quadr.result].value[id].param:
                if dimension > 0 and matriz == 0:
                    memo.copyVectorToExe(direccion, dimension, tipo)
                elif dimension > 0 and matriz > 0:
                    tam = matriz * dimension
                    memo.copyVectorToExe(direccion, tam, tipo)
                else:
                    valor = master.simbolos[quadr.result].value[id].value
                    memo.insertLocalInMemory(tipo, direccion)
                    memo.updateLocalInMemory(valor, direccion, tipo)
    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 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.º 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 miInput(quadr, i):
    resDir = tieneDireccion(quadr.result)
    valor = input()
    tipo = str(get_type(valor))
    if tipo == "<class 'int'>":
        valor = int(valor)
        memo.updateLocalInMemory(valor, resDir)
    elif tipo == "<class 'float'>":
        valor = float(valor)
        memo.updateLocalInMemory(valor, resDir)
    elif tipo == "<class 'str'>":
        valor = str(valor)
        memo.updateLocalInMemory(valor, resDir)
    elif valor == 'true' or valor == 'false':
        memo.updateLocalInMemory(valor, resDir, 'bool')
    return i + 1
Exemplo n.º 6
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.º 7
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