def Resolver(IdAsId, ts, Consola, exceptions): if (isinstance(IdAsId.id1, Time)): valor = Time.resolverTime(IdAsId.id1) return valor elif (isinstance(IdAsId.id1, Math_)): valor = Math_.Resolver(IdAsId.id1, ts, Consola, exceptions) return str(valor) elif (isinstance(IdAsId.id1, Trigonometrica)): valor = Trigonometrica.Resolver(IdAsId.id1, ts, Consola, exceptions) return valor elif (isinstance(IdAsId.id1, Primitivo)): valor = IdAsId.id1.valor return valor elif (isinstance(IdAsId.id1, Id)): valor = IdAsId.id1.id return valor elif (isinstance(IdAsId.id1, IdId)): valor1 = IdAsId.id1.id1 valor2 = IdAsId.id1.id2 return [valor1, valor2] elif isinstance(IdAsId.id1, Expresion): return Expresion.Resolver(IdAsId.id1, ts, Consola, exceptions) return 'what -- ' + type(IdAsId.id1).__name__ + '\n'
def ejecutar(Select,ts,Consola,exceptions,Mostrar): #type(self).__name__ print('what -- '+type(Select.columnas).__name__) x = PrettyTable() rowpp=[] en=[] for columna in Select.columnas: i=0 if isinstance(columna , Select.__class__): Consola.append('what -- ' + type(columna).__name__ + '\n') elif isinstance(columna,Time): en.append('time') time = Time.resolverTime(columna) rowpp.append(time) #Consola.append('what -- ' + time + '\n') elif isinstance(columna,IdId):# no porque no tiene from Consola.append('what -- ' + type(columna).__name__ + '\n') exceptions.append( 'Error semantico - 42P01 - falta una entrada para la tabla en la cláusula FROM, error en ' + ' - ' + str(Select.fila) + ' - ' + str(Select.columna) + '') elif isinstance(columna,Id): # no porque no tiene from Consola.append('what -- ' + type(columna).__name__ + '\n') exceptions.append('Error semantico - 42703 - no existe la columna, error en '+' - '+str(Select.fila)+' - '+str(Select.columna)+'') elif isinstance(columna, IdAsId): # no porque no tiene from if(isinstance(columna.id2,Primitivo)): en.append(columna.id2.valor) else: en.append(columna.id2.id) val = IdAsId.Resolver(columna,Consola) rowpp.append(str(val)) #Consola.append('what -- ' + str(val)+ '\n') elif isinstance(columna,Math_): #hay que resolver en.append(str(columna.nombre)) val=Math_.Resolver(columna,Consola,Consola,exceptions) rowpp.append(str(val)) #Consola.append('what -- ' + type(columna).__name__ + '\n') elif isinstance(columna,Trigonometrica): #hay que resolver en.append(str(columna.trig)) REST=Trigonometrica.Resolver(columna,ts,Consola,exceptions) rowpp.append(str(REST)) #Consola.append('what -- ' + str(REST) + '\n') i= i + 1 x.add_row(rowpp) x.field_names = en if Mostrar: Consola.append(x.get_string()+'\n') return [en,rowpp]
def Expre(expre, consola, ts, exceptions): res = 0 if isinstance(expre, Primitivo): res = expre.valor ##print('es primitivo ' + str(res)) elif isinstance(expre, Id): ##print('es id error semantico') res = None elif isinstance(expre, Time): res = Time.resolverTime(expre) else: ##print('es expresion') res = Expresion.Resolver(expre, ts, consola, exceptions) ##print(str(res)) return res
def ejecutar(Select,ts, Consola,exceptions,Mostrar): # Error semantico - numero error - descripcion - fila - columna #si pueden ir a buscar la bd actual #simular insert('test','tblibrosalario',[1,2020,10,1300,10.30]) insert('test','tblibrosalario',[2,2020,10,1300,10.30]) insert('test','tblibrosalario',[3,2020,10,1300,10.30]) #van usar extractTable('test','tblibrosalario') x = PrettyTable() #print(Select.time.momento) datet = Time.resolverTime(Select.time) if Select.time.caso == 1: # EXTRACT x.field_names = ["extract"] x.add_row([datet]) elif Select.time.caso == 2: # NOW x.field_names = ["now"] x.add_row([str(datet)]) elif Select.time.caso == 3: # date_part x.field_names = ["date_part"] x.add_row([datet]) elif Select.time.caso == 4: # current_date x.field_names = ["current_date"] x.add_row([str(datet)]) elif Select.time.caso == 5: # current_time x.field_names = ["current_time"] x.add_row([str(datet)]) elif Select.time.caso == 6: # TIMESTAMP x.field_names = ["timestamp"] x.add_row([str(datet)]) if Mostrar: Consola.append('\n'+x.get_string()+'\n') return str(datet)
def getC3D(self, lista_optimizaciones_C3D): temporal = GeneradorTemporales.nuevo_temporal() codigo_quemado = "alter database %s " % self.name if self.caso == 1: codigo_quemado += 'rename to %s ;' % self.newName else: codigo_quemado += 'owner to ' nombre = '' if isinstance(self.newName, Primitivo): nombre = self.newName.valor else: nombre = Time.resolverTime(self.newName) codigo_quemado += '\'%s\' ;' % nombre c3d = ''' # ----------ALTER DATABASE----------- top_stack = top_stack + 1 %s = "%s" stack[top_stack] = %s ''' % (temporal, codigo_quemado, temporal) return c3d
def ResolverReturn(expr, ts, entornoFuncion, Consola, exception): if isinstance(expr, Expresion): exp1 = ResolverReturn(expr.iz, ts, entornoFuncion, Consola, exception) exp2 = ResolverReturn(expr.dr, ts, entornoFuncion, Consola, exception) if expr.operador == '=': return exp1 == exp2 elif expr.operador == '*': # id = expresion # id = (x < 9) if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or ( isinstance(exp1, int) and isinstance(exp2, float)): return exp1 * exp2 return 'error' elif expr.operador == '/': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or ( isinstance(exp1, int) and isinstance(exp2, float)): return exp1 / exp2 return 'error' elif expr.operador == '+': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or ( isinstance(exp1, int) and isinstance(exp2, float)): return exp1 + exp2 return 'error' elif expr.operador == '-': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or ( isinstance(exp1, int) and isinstance(exp2, float)): return exp1 - exp2 return 'error' elif expr.operador == '^': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or ( isinstance(exp1, int) and isinstance(exp2, float)): return exp1 ** exp2 return 'error' elif expr.operador == '%': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or ( isinstance(exp1, int) and isinstance(exp2, float)): return exp1 % exp2 return 'error' elif expr.operador == '==': # comparacion--------------------------------------- boole = exp1 == exp2 return boole elif expr.operador == '<>': boole = exp1 != exp2 return boole elif expr.operador == '>': boole = exp1 > exp2 return boole elif expr.operador == '<': boole = exp1 < exp2 return boole elif expr.operador == '!=': boole = exp1 != exp2 return boole elif expr.operador == '>=': boole = exp1 >= exp2 return boole elif expr.operador == '<=': boole = exp1 <= exp2 return boole elif isinstance(expr, Id): #VERIFICAMOS SI ES UNA VARIABLE DE LA FUNCION if ts.validar_sim(expr.id) == 1: simbolo = ts.buscar_sim(expr.id) return simbolo.valor else: if entornoFuncion.validar_sim(expr.id) == 1: simbolo = entornoFuncion.buscar_sim(expr.id) return simbolo.valor elif isinstance(expr, Primitivo): if expr.valor == 'TRUE': return True elif expr.valor == 'FALSE': return False else: return expr.valor elif isinstance(expr, Trigonometrica.Trigonometrica): return Trigonometrica.Trigonometrica.Resolver(expr, ts, Consola, exception) elif isinstance(expr, Math.Math_): # print("estoy llegango") return Math.Math_.Resolver(expr, ts, Consola, exception) elif isinstance(expr, Time): return Time.resolverTime(expr) elif isinstance(expr, Binario): return Binario.Resolver(expr, ts, Consola, exception) elif isinstance(expr, Unario): exp1 = Expresion.Resolver(expr.op, ts, Consola, exception) if expr.operador == '-': if isinstance(exp1, int) or isinstance(exp1, float): return exp1 * -1 elif expr.operador == '+': if isinstance(exp1, int) or isinstance(exp1, float): return exp1 elif expr.operador == '!': return not exp1
def Resolver(expr, ts, Consola, exception): if isinstance(expr, Expresion): exp1 = Expresion.Resolver(expr.iz, ts, Consola, exception) exp2 = Expresion.Resolver(expr.dr, ts, Consola, exception) if expr.operador == '=': return exp1 == exp2 elif expr.operador == '*': # id = expresion # id = (x < 9 ) if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or (isinstance( exp1, int) and isinstance(exp2, float)): return exp1 * exp2 return 'error' elif expr.operador == '/': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or (isinstance( exp1, int) and isinstance(exp2, float)): return exp1 / exp2 return 'error' elif expr.operador == '+': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or (isinstance( exp1, int) and isinstance(exp2, float)): return exp1 + exp2 return 'error' elif expr.operador == '-': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or (isinstance( exp1, int) and isinstance(exp2, float)): return exp1 - exp2 return 'error' elif expr.operador == '^': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or (isinstance( exp1, int) and isinstance(exp2, float)): return exp1**exp2 return 'error' elif expr.operador == '%': if (isinstance(exp1, float) and isinstance(exp2, float)) or ( isinstance(exp1, int) and isinstance(exp2, int)) or ( isinstance(exp1, float) and isinstance(exp2, int)) or (isinstance( exp1, int) and isinstance(exp2, float)): return exp1 % exp2 return 'error' elif expr.operador == '==': #comparacion--------------------------------------- boole = exp1 == exp2 return boole elif expr.operador == '<>': boole = exp1 != exp2 return boole elif expr.operador == '>': boole = exp1 > exp2 return boole elif expr.operador == '<': boole = exp1 < exp2 return boole elif expr.operador == '!=': boole = exp1 != exp2 return boole elif expr.operador == '>=': boole = exp1 >= exp2 return boole elif expr.operador == '<=': boole = exp1 <= exp2 return boole elif isinstance(expr, Id): if ts.validar_sim(expr.id) == 1: return expr.id else: return 'holamundo' elif isinstance(expr, Primitivo): return expr.valor elif isinstance(expr, Trigonometrica.Trigonometrica): return Trigonometrica.Trigonometrica.Resolver( expr, ts, Consola, exception) elif isinstance(expr, Math.Math_): print("estoy llegango") return Math.Math_.Resolver(expr, ts, Consola, exception) elif isinstance(expr, Time): return Time.resolverTime(expr) elif isinstance(expr, Binario): return Binario.Resolver(expr, ts, Consola, exception) elif isinstance(expr, Unario): exp1 = Expresion.Resolver(expr.op, ts, Consola, exception) if expr.operador == '-': if isinstance(exp1, int) or isinstance(exp1, float): return exp1 * -1 elif expr.operador == '+': if isinstance(exp1, int) or isinstance(exp1, float): return exp1 elif expr.operador == '!': return not exp1
def Resolver(where, ts, Exceptions, Consola, DataSelect): if (isinstance(where, Where)): if where.caso == 1: # not boolean print('not boolean') elif where.caso == 2 or where.caso == 11: #in listavalores = [] nombreCampo = Where.ObtenerNombreCampo(where) print('nombreCampito22---' + nombreCampo) datos = [] if isinstance(where.listaValores, Select): print('Select') if (where.listaValores.caso == 1): a = Time.resolverTime(where.listaValores.time) listavalores.append(a) elif (where.listaValores.caso == 3): variable = Select_inst() a = Select_inst.ejecutar(variable, where.listaValores, ts, Consola, Exceptions) print('valores sin filtrar Fredy') print(a) for val in a: listavalores.append(val[0]) print(listavalores) elif (where.listaValores.caso == 4): a = Selectp3.Selectp3.ejecutar(where.listaValores, ts, Consola, Exceptions, False) print(a) for val in a[1]: listavalores.append(val[0]) print(listavalores) elif (where.listaValores.caso == 5): a = Selectp4.ejecutar(where.listaValores, ts, Consola, Exceptions, False) print('resultado') for val in a[1]: listavalores.append(val[0]) print(listavalores) else: for val in where.listaValores: if (isinstance(val, Primitivo)): listavalores.append(val.valor) elif (isinstance(val, Time)): v = Time.resolverTime(val) listavalores.append(str(v)) num = Where.ColumnasRepetidas(DataSelect, nombreCampo) if num == 1: # existe y no hay campos repetidos no hay ambigüedad datos = Where.ObtenerDatos(DataSelect, nombreCampo) print('datitos') print(datos) #procedemos a comparar cada registro con la lista de comparacion filas = Where.filtrarLista(datos, listavalores, Exceptions) print('filaaaaaaaas') print(filas) return [True, filas, DataSelect] elif num == 0: Exceptions.append( 'Error semantico - 42703 -no existe la columna , error en ' + ' - ' + where.fila + ' - ' + where.columna + '') return [False, 'No existe la columna ' + nombreCampo] else: Exceptions.append( 'Error semantico - 42702 -la referencia a la columna es ambigua, error en ' + ' - ' + where.fila + ' - ' + where.columna + '') return [ False, 'Existe ambigüedad en el campo ' + nombreCampo ] elif where.caso == 9 or where.caso == 10: # Not in # in listavalores = [] nombreCampo = Where.ObtenerNombreCampo(where) print('nombreCampito22---' + nombreCampo) datos = [] if isinstance(where.listaValores, Select): print('Select') if (where.listaValores.caso == 1): a = Time.resolverTime(where.listaValores.time) listavalores.append(a) elif (where.listaValores.caso == 3): variable = Select_inst() a = Select_inst.ejecutar(variable, where.listaValores, ts, Consola, Exceptions) print('valores sin filtrar Fredy') print(a) for val in a: listavalores.append(val[0]) print(listavalores) elif (where.listaValores.caso == 4): a = Selectp3.Selectp3.ejecutar(where.listaValores, ts, Consola, Exceptions, False) print(a) for val in a[1]: listavalores.append(val[0]) print(listavalores) elif (where.listaValores.caso == 5): a = Selectp4.ejecutar(where.listaValores, ts, Consola, Exceptions, False) print('resultado') print(a) for val in a[1]: listavalores.append(val[0]) else: for val in where.listaValores: if (isinstance(val, Primitivo)): listavalores.append(val.valor) elif (isinstance(val, Time)): v = Time.resolverTime(val) listavalores.append(str(v)) num = Where.ColumnasRepetidas(DataSelect, nombreCampo) if num == 1: # existe y no hay campos repetidos no hay ambigüedad datos = Where.ObtenerDatos(DataSelect, nombreCampo) print('datitos') print(datos) # procedemos a comparar cada registro con la lista de comparacion filas = Where.filtrarLista2(datos, listavalores, Exceptions) print('filaaaaaaaas') print(filas) return [True, filas, DataSelect] elif num == 0: Exceptions.append( 'Error semantico - 42703 -no existe la columna , error en ' + ' - ' + where.fila + ' - ' + where.columna + '') return [False, 'No existe campo ' + nombreCampo] else: Exceptions.append( 'Error semantico - 42702 -la referencia a la columna es ambigua, error en ' + ' - ' + where.fila + ' - ' + where.columna + '') return [ False, 'Existe ambigüedad en el campo ' + nombreCampo ] elif where.caso == 6: ## comparison print('comparison') print(type(where.valor1).__name__) elif (isinstance(where, Expresion)): l = Where.ResolverExpresion(where, Exceptions, Consola, DataSelect) print('AJAAA') print(l) return [True, l]
def ResolverExpresion(Expr, Consola, exception, DataSelect): if isinstance(Expr, Expresion): if str(Expr.operador).upper() == 'AND': print('and') exp1 = Where.ResolverExpresion(Expr.iz, Consola, exception, DataSelect) exp2 = Where.ResolverExpresion(Expr.dr, Consola, exception, DataSelect) cont = 0 filas = [] if isinstance(exp1, list) and isinstance(exp2, list): for fila in exp1: if fila in exp2: filas.append(fila) return filas elif str(Expr.operador).upper() == 'OR': print('or') exp1 = Where.ResolverExpresion(Expr.iz, Consola, exception, DataSelect) exp2 = Where.ResolverExpresion(Expr.dr, Consola, exception, DataSelect) cont = 0 filas = [] if isinstance(exp1, list) and isinstance(exp2, list): for fila in exp1: if not (fila in filas): filas.append(fila) for fila in exp2: if not (fila in filas): filas.append(fila) return filas else: val1 = Where.ResolverExpresion(Expr.iz, Consola, exception, DataSelect) val2 = Where.ResolverExpresion(Expr.dr, Consola, exception, DataSelect) filas = [] if isinstance(val1, list): contPos = -1 for valor in val1: if isinstance(valor, str): if str(valor).isnumeric() or str( valor).isdecimal(): valor = float(valor) prim = Primitivo(valor, Expr.fila, Expr.columna) if isinstance(val2, list): if isinstance(val2[contPos + 1], str): n = val2[contPos + 1] if str(n).isnumeric() or str(n).isdecimal(): n = float(n) else: n = val2[contPos + 1] prim2 = Primitivo(n, Expr.fila, Expr.columna) r = Expresion(prim, prim2, Expr.operador, Expr.fila, Expr.columna) b = Expresion.Resolver(r, Consola, exception, DataSelect) if isinstance(b, bool): if b: filas.append(contPos + 1) else: r = Expresion(prim, val2, Expr.operador, Expr.fila, Expr.columna) print(type(r).__name__) b = Expresion.Resolver(r, Consola, exception, DataSelect) if isinstance(b, bool): if b: filas.append(contPos + 1) contPos = contPos + 1 return filas elif isinstance(Expr, Primitivo): return Expr elif isinstance(Expr, Id): nombreCampo = Expr.id num = Where.ColumnasRepetidas(DataSelect, nombreCampo) if num == 1: # existe y no hay campos repetidos no hay ambigüedad datos = Where.ObtenerDatos(DataSelect, nombreCampo) print('datitos222') print(datos) return datos elif isinstance(Expr, IdId): print('id.id') nombreCampo = '' if isinstance(Expr.id1, Id): nombreCampo = Expr.id1.id if isinstance(Expr.id2, Id): nombreCampo = nombreCampo + '.' + Expr.id2.id num = Where.ColumnasRepetidas(DataSelect, nombreCampo) if num == 1: # existe y no hay campos repetidos no hay ambigüedad datos = Where.ObtenerDatos(DataSelect, nombreCampo) print('datitos222') print(datos) return datos elif isinstance(Expr, Math_.Math_): print(Expr.nombre) a = Math_.Math_.Resolver(Expr, None, Consola, exception) print(type(a).__name__) return Primitivo(a, Expr.fila, Expr.columna) elif isinstance(Expr, Trigonometrica.Trigonometrica): a = Trigonometrica.Trigonometrica.Resolver(Expr, None, Consola, exception) return Primitivo(a, Expr.fila, Expr.columna) elif isinstance(Expr, Time): return Time.resolverTime(Expr) elif isinstance(Expr, Where): a = Where.Resolver(Expr, None, Consola, exception, DataSelect) if isinstance(a[0], bool): return a[1] else: return []
def ejecutar(Select,ts,Consola,exceptions,Mostrar): #type(self).__name__ ##print('what -- '+type(Select.columnas).__name__) x = PrettyTable() rowpp=[] en=[] for columna in Select.columnas: i=0 if isinstance(columna , Select.__class__): Consola.append('what -- ' + type(columna).__name__ + '\n') elif isinstance(columna,Time): en.append('time') time = Time.resolverTime(columna) rowpp.append(time) #Consola.append('what -- ' + time + '\n') elif isinstance(columna,IdId):# no porque no tiene from Consola.append('what -- ' + type(columna).__name__ + '\n') exceptions.append( 'Error semantico - 42P01 - falta una entrada para la tabla en la cláusula FROM, error en ' + ' - ' + str(Select.fila) + ' - ' + str(Select.columna) + '') elif isinstance(columna,IdId):# no porque no tiene from Consola.append('42P01 - falta una entrada para la tabla en la cláusula FROM') exceptions.append( 'Error semantico - 42P01 - falta una entrada para la tabla en la cláusula FROM, error en ' + ' - ' + str(Select.fila) + ' - ' + str(Select.columna) + '') elif isinstance(columna, Funcion): bdactual = ts.buscar_sim("usedatabase1234") if bdactual is not None: BD = ts.buscar_sim(bdactual.valor) entornoBD = BD.Entorno funcion = entornoBD.buscar_sim(columna.id) if funcion.categoria == TS.TIPO_DATO.FUNCTION: datafinal = EjecutarFuncion.ResolverFuncion(columna, ts, Consola, exceptions) EjecutarFuncion.limpiarFuncion(columna, ts) en.append(columna.id) rowpp.append(datafinal) EjecutarFuncion.limpiarFuncion(columna, ts) else: Consola.append('42883 undefined_function') exceptions.append( 'Error semantico - 42883 - undefined_functions' + ' - ' + str( Select.fila) + ' - ' + str(Select.columna) + '') elif isinstance(columna, IdAsId): # no porque no tiene from if(isinstance(columna.id2,Primitivo)): en.append(columna.id2.valor) else: en.append(columna.id2.id) val = IdAsId.Resolver(columna, ts, Consola, exceptions) rowpp.append(str(val)) #Consola.append('what -- ' + str(val)+ '\n') elif isinstance(columna,Math_): #hay que resolver en.append(str(columna.nombre)) val=Math_.Resolver(columna,Consola,Consola,exceptions) rowpp.append(str(val)) #Consola.append('what -- ' + type(columna).__name__ + '\n') elif isinstance(columna,Trigonometrica): #hay que resolver en.append(str(columna.trig)) REST=Trigonometrica.Resolver(columna,ts,Consola,exceptions) rowpp.append(str(REST)) #Consola.append('what -- ' + str(REST) + '\n') i= i + 1 x.add_row(rowpp) x.field_names = en if Mostrar: Consola.append('\n'+x.get_string()+'\n') return [en, rowpp]
def Resolver(expr,ts,Consola,exception): if isinstance(expr,Expresion): exp1 = Expresion.Resolver(expr.iz,ts,Consola,exception) exp2 = Expresion.Resolver(expr.dr,ts,Consola,exception) if expr.operador == '=': return exp1 == exp2 elif expr.operador == '*': # id = expresion # id = (x < 9 ) if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int)) or (isinstance(exp1,int) and isinstance(exp2,float)) : return exp1 * exp2 return 'error' elif expr.operador == '/': if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int)) or (isinstance(exp1,int) and isinstance(exp2,float)) : return exp1 / exp2 return 'error' elif expr.operador == '+': if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int)) or (isinstance(exp1,int) and isinstance(exp2,float)): return exp1 + exp2 return 'error' elif expr.operador == '-': if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int)) or (isinstance(exp1,int) and isinstance(exp2,float)): return exp1 - exp2 return 'error' elif expr.operador == '^': if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int)) or (isinstance(exp1,int) and isinstance(exp2,float)): return exp1 ** exp2 return 'error' elif expr.operador == '%': if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int)) or (isinstance(exp1,int) and isinstance(exp2,float)): return exp1 % exp2 return 'error' elif expr.operador == '==': boole= exp1 == exp2 return boole elif expr.operador == '<>': boole = exp1 != exp2 return boole elif expr.operador == '>': boole = exp1 > exp2 return boole elif expr.operador == '<': boole = exp1 < exp2 return boole elif expr.operador == '!=': boole = exp1 != exp2 return boole elif expr.operador == '>=': boole = exp1 >= exp2 return boole elif expr.operador == '<=': boole = exp1 <= exp2 return boole elif isinstance(expr,Id): if ts.validar_sim(expr.id) == 1: simvariable = ts.buscar_sim(expr.id) return simvariable.valor else: return 'holamundo' #No deberia de pasar elif isinstance(expr, Primitivo): if expr.valor == 'TRUE': return True elif expr.valor == 'FALSE': return False else: return expr.valor elif isinstance(expr, Trigonometrica.Trigonometrica): return Trigonometrica.Trigonometrica.Resolver(expr,ts,Consola,exception) elif isinstance(expr, Math.Math_): return Math.Math_.Resolver(expr,ts,Consola,exception) elif isinstance(expr,Time): return Time.resolverTime(expr) elif isinstance(expr,Binario): return Binario.Resolver(expr,ts,Consola,exception) elif isinstance(expr, Unario): exp1 = Expresion.Resolver(expr.op,ts,Consola,exception) if expr.operador == '-': if isinstance(exp1, int) or isinstance(exp1, float): return exp1 * -1 elif expr.operador == '+': if isinstance(exp1, int) or isinstance(exp1, float): return exp1 elif expr.operador == '!': return not exp1