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