def xor_entero(param1: Valor, param2: Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 # Solo Se Pueden Valores Numericos if param1.tipo == 0: if param2.tipo == 0: # Entero tipo_resultante = 0 if param1.dar_valor() != param2.dar_valor(): rst = 1 else: rst = 0 else: Ts.cargar_error( "Error En XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Operacion XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) else: Ts.cargar_error( "Error En XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Operacion XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def xor_binario(param1: Valor, param2: Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 #Solo Se Pueden Valores Numericos if (param1.tipo == 0): if param2.tipo == 0: #Entero tipo_resultante = 0 rst = param1.dar_valor() ^ param2.dar_valor() else: print("Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) Ts.cargar_error( "Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) else: Ts.cargar_error( "Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def shift_izquierda(param1: Valor, param2: Valor): tipo_resultante = 0 rst = 0 from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts #Solo Se Pueden Valores Numericos if (param1.tipo == 0): if param2.tipo == 0: #Entero tipo_resultante = 0 rst = param1.dar_valor() << param2.dar_valor() else: print("Error En shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) Ts.cargar_error( "Error En Shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) else: Ts.cargar_error( "Error En Shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En Shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def mayor_igual(param1: Valor, param2: Valor): tipo_resultante = 0 rst = 0 # Solo Se Pueden Valores Numericos if param1.dar_valor() >= param2.dar_valor(): rst = 1 else: rst = 0 return Valor(rst, tipo_resultante)
def diferente(param1: Valor, param2: Valor): tipo_resultante = 0 rst = 0 # Solo Se Pueden Valores Numericos if param1.dar_valor() != param2.dar_valor(): rst = 1 else: rst = 0 return Valor(rst, tipo_resultante)
def sumar(param1 : Valor, param2 : Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 #Solo Se Pueden Valores Numericos if(param1.tipo==0): if param2.tipo==0: #Entero tipo_resultante=0 rst=param1.dar_valor() + param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() + param2.dar_valor() else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) elif param1.tipo==1: if param2.tipo==0: #Decimal tipo_resultante=1 rst=param1.dar_valor() + param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() + param2.dar_valor() else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) elif param1.tipo == 2: if param2.tipo == 2: # Decimal tipo_resultante = 2 rst = str(param1.dar_valor()) + str(param2.dar_valor()) else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def absoluto(param1: Valor): tipo_resultante = 0 rst = 0 #Solo Se Pueden Valores Numericos if (param1.tipo == 0): rst = abs(param1.dar_valor()) tipo_resultante = 0 elif param1.tipo == 1: tipo_resultante = 1 rst = abs(param1.dar_valor()) else: print("Error En La ABS Con Tipos: " + param1.dar_tipo_str()) return Valor(rst, tipo_resultante)
def cast_int(param: Valor): tipo_rst = 0 rst = 0 if param.tipo == 0: rst = param.dar_valor() elif param.tipo == 1: rst = int(param.dar_valor()) elif param.tipo == 2: rst = 0 if param.dar_valor() != "": caracter = param.dar_valor()[0] rst = ord(caracter) elif param.tipo == 4: return cast_int(param.primer_elemento()) else: print(" TIPO NO RECONOCIDO CASTEO") return Valor(rst, tipo_rst)
def dividir(param1 : Valor, param2 : Valor): tipo_resultante = 0 rst = 0 from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts if param2.dar_valor()==0: Ts.cargar_error( "No se pude dividir entre 0 " , 0, ((0, 0))) print(" No se puede dividir entre 0") return Valor(0, 0) #Solo Se Pueden Valores Numericos if(param1.tipo==0): if param2.tipo==0: #Entero tipo_resultante=0 rst=param1.dar_valor() / param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() / param2.dar_valor() else: Ts.cargar_error( "Error En la division Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) elif param1.tipo==1: if param2.tipo==0: #Decimal tipo_resultante=1 rst=param1.dar_valor() / param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() / param2.dar_valor() else: Ts.cargar_error( "Error En la division Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) else: Ts.cargar_error( "Error En la division Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) return Valor(rst, tipo_resultante)
def negar_binario(param1 : Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 #Solo Se Pueden Valores Numericos if(param1.tipo==0): tipo_resultante=param1.tipo rst = ~param1.dar_valor() else: Ts.cargar_error( "Error En Negacion Binario Con Tipos: " + param1.dar_tipo_str() , 0, ((0, 0))) print("Error En La NegacionBinaria Con Tipos: " + param1.dar_tipo_str() ) return Valor(rst, tipo_resultante)
def not_num(param1: Valor): tipo_resultante = 0 rst = 0 from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts #Solo Se Pueden Valores Numericos if (param1.tipo == 0): tipo_resultante = param1.tipo if param1.dar_valor() > 0: rst = 0 else: rst = 1 else: Ts.cargar_error( "Error En La Resta Unaria Con Tipos: " + param1.dar_tipo_str(), 0, ((0, 0))) print("Error En La Resta Unaria Con Tipos: " + param1.dar_tipo_str()) return Valor(rst, tipo_resultante)
def cast_char(param: Valor): tipo_rst = 2 rst = 0 if param.tipo == 0: val_ascii=param.dar_valor() if param.dar_valor() > 255: val_ascii= param.dar_valor() % 256 rst = chr(val_ascii) elif param.tipo == 1: val_ascii = int(param.dar_valor()) if param.dar_valor() > 255: val_ascii = param.dar_valor() % 256 rst = chr(val_ascii) elif param.tipo == 2: rst = "" if param.dar_valor() != "": caracter = param.dar_valor()[0] rst = caracter elif param.tipo == 4: return cast_char(param.primer_elemento()) else: print(" TIPO NO RECONOCIDO CASTEO") return Valor(rst, tipo_rst)