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
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
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
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
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
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)
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
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()
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
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