text: import math
  from Instrucciones.TablaSimbolos.Instruccion import Instruccion
  from Instrucciones.TablaSimbolos.Tipo import Tipo_Dato, Tipo
  from Instrucciones.Excepcion import Excepcion
  from Instrucciones.TablaSimbolos import Instruccion3D as c3d
  from Optimizador.C3D import Valor as ClassValor
  from Optimizador.C3D import OP_ARITMETICO as ClassOP_ARITMETICO
  from Optimizador.C3D import Identificador as ClassIdentificador
  
  class Sin(Instruccion):
      def __init__(self, valor, strGram, linea, columna):
          Instruccion.__init__(self,Tipo(Tipo_Dato.DOUBLE_PRECISION),linea,columna,strGram)
          self.valor = valor
  
      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.SMALLINT and self.valor.tipo.tipo != Tipo_Dato.INTEGER and self.valor.tipo.tipo != Tipo_Dato.BIGINT and self.valor.tipo.tipo != Tipo_Dato.DECIMAL and self.valor.tipo.tipo != Tipo_Dato.NUMERIC and self.valor.tipo.tipo != Tipo_Dato.REAL and self.valor.tipo.tipo != Tipo_Dato.DOUBLE_PRECISION:
              error = Excepcion('42883',"Semántico","No existe la función sin("+self.valor.tipo.toString()+")",self.linea,self.columna)
              arbol.excepciones.append(error)
              arbol.consola.append(error.toString())
              return error
          try:
              return math.sin(resultado)
          except ValueError as c:
              error = Excepcion('22003',"Semántico","La entrada está fuera de rango",self.linea,self.columna)
              arbol.excepciones.append(error)
              arbol.consola.append(error.toString())
              return error
  
      def generar3D(self, tabla, arbol):
          super().generar3D(tabla,arbol)
          code = []
          code.append(c3d.asignacionH())
          code.append(c3d.aumentarP())
          t0 = c3d.getLastTemporal()
          t1 = c3d.getTemporal()
          code.append(c3d.operacion(t1, ClassIdentificador(t0), ClassValor("\"SIN(" + str(self.valor.generar3D(tabla, arbol)) + ")\"", "STRING"), ClassOP_ARITMETICO.SUMA))
  
          return code