def ejecutar(self, tabla, arbol): super().ejecutar(tabla, arbol) if isinstance(self.valor, Primitivo): if self.indice < len(self.valor.valor): if self.valor.tipo.tipo == Tipo_Dato.CHAR or self.valor.tipo.tipo == Tipo_Dato.VARCHAR or self.valor.tipo.tipo == Tipo_Dato.VARYING or self.valor.tipo.tipo == Tipo_Dato.CHARACTER or self.valor.tipo.tipo == Tipo_Dato.TEXT: return ord( str(self.valor.valor) [int(self.indice):int(self.indice) + 1]) else: error = Excepcion( '2202E', "Semántico", f"El índice {self.indice} esta fuera de rango [0..{len(self.valor.valor)}]", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append(error.toString()) return error elif isinstance(self.valor, Identificador): print("FALTA PROGRAMAR PARA IDENTIFICADOR GET_BYTE") error = Excepcion( '42883', "Semántico", f"No existe la función GET_BYTE({self.valor.tipo.toString()})", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append( "HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." ) arbol.consola.append(error.toString()) return error
def ejecutar(self, tabla, arbol): super().ejecutar(tabla, arbol) resultado = self.valor.ejecutar(tabla, arbol) if isinstance(resultado, Excepcion): return resultado if self.indice < len(resultado): if self.valor.tipo.tipo == Tipo_Dato.CHAR or self.valor.tipo.tipo == Tipo_Dato.VARCHAR or self.valor.tipo.tipo == Tipo_Dato.VARYING or self.valor.tipo.tipo == Tipo_Dato.CHARACTER or self.valor.tipo.tipo == Tipo_Dato.TEXT: self.tipo = Tipo(Tipo_Dato.INTEGER) return ord( str(resultado)[int(self.indice):int(self.indice) + 1]) else: error = Excepcion( '2202E', "Semántico", f"El índice {self.indice} esta fuera de rango [0..{len(self.valor.valor)}]", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append(error.toString()) return error error = Excepcion( '42883', "Semántico", f"No existe la función GET_BYTE({self.valor.tipo.toString()})", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append( "HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." ) arbol.consola.append(error.toString()) return error
def ejecutar(self, tabla, arbol): super().ejecutar(tabla,arbol) resultado = self.valor.ejecutar(tabla,arbol) if isinstance(resultado, Excepcion): return resultado if self.valor.tipo.tipo== Tipo_Dato.CHAR or self.valor.tipo.tipo== Tipo_Dato.CHARACTER or self.valor.tipo.tipo== Tipo_Dato.TEXT: if str(self.codificacion.valor)=='base64': message_bytes = resultado.encode('ascii') base64_bytes = base64.b64encode(message_bytes) base64_message = base64_bytes.decode('ascii') resultado=base64_message self.tipo = Tipo("",Tipo_Dato.TEXT) return resultado if str(self.codificacion.valor)=='hex': self.tipo = Tipo("",Tipo_Dato.TEXT) return str(resultado).encode("utf-8").hex() error = Excepcion('22023',"Semántico",f"No se reconoce la codificación{self.valor.tipo.toString()})",self.linea,self.columna) arbol.excepciones.append(error) #arbol.consola.append("HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos.") arbol.consola.append(error.toString()) return error
def ejecutar(self, tabla, arbol): super().ejecutar(tabla, arbol) resultado = self.valor.ejecutar(tabla, arbol) if isinstance(resultado, Excepcion): return resultado #print("RESULTADO:",resultado) #if isinstance(resultado, Primitivo): if self.valor.tipo.tipo == Tipo_Dato.CHAR or self.valor.tipo.tipo == Tipo_Dato.VARCHAR or self.valor.tipo.tipo == Tipo_Dato.VARYING or self.valor.tipo.tipo == Tipo_Dato.CHARACTER or self.valor.tipo.tipo == Tipo_Dato.TEXT: #if self.valor.tipo.tipo== Tipo_Dato.CHAR or self.valor.tipo.tipo== Tipo_Dato.CHARACTER: self.tipo = Tipo("", Tipo_Dato.INTEGER) return len(str(resultado)) #elif isinstance(resultado, Identificador): # print("HAY QUE PROGRAMAR LO DE IDENTIFICADOR LENGTH") error = Excepcion( '42883', "Semántico", f"No existe la función LENGTH({self.valor.tipo.toString()})", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append( "HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." ) arbol.consola.append(error.toString()) return error
def ejecutar(self, tabla, arbol): super().ejecutar(tabla, arbol) resultado = self.valor.ejecutar(tabla, arbol) if isinstance(resultado, Excepcion): return resultado if self.indice < len(resultado): if self.valor.tipo.tipo == Tipo_Dato.CHAR or self.valor.tipo.tipo == Tipo_Dato.VARCHAR or self.valor.tipo.tipo == Tipo_Dato.VARYING or self.valor.tipo.tipo == Tipo_Dato.CHARACTER or self.valor.tipo.tipo == Tipo_Dato.TEXT: cadena = "" cont = 0 for letra in str(self.valor.valor): if (cont == int(self.indice)): cadena += chr(self.caracter) cont += 1 continue cadena += letra cont += 1 resultado = cadena self.tipo = Tipo("", Tipo_Dato.TEXT) return resultado else: error = Excepcion( '2202E', "Semántico", f"El índice {self.indice} esta fuera de rango [0..{len(self.valor.valor)}]", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append(error.toString()) return error error = Excepcion( '42883', "Semántico", f"No existe la función SET_BYTE({self.valor.tipo.toString()})", self.linea, self.columna) arbol.excepciones.append(error) arbol.consola.append( "HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos." ) arbol.consola.append(error.toString()) return error