Пример #1
0
 def __init__(self, ref: str, lst: []):
     temp = VariableValor.VariableValor(ref)
     temp.indices(lst)
     if len(lst) > 0:
         self.ref = Valor(0, 0)
     else:
         self.ref = Valor(temp, 5)
Пример #2
0
def or_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() == 1) or (param2.dar_valor() == 1):
                rst = 1
            else:
                rst = 0

        else:
            Ts.cargar_error(
                "Error En || Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0,
                ((0, 0)))
            print("Error En La Operacion || Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str())

    else:
        Ts.cargar_error(
            "Error En || Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0,
            ((0, 0)))
        print("Error En La Operacion || Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str())

    return Valor(rst, tipo_resultante)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
 def arreglo_obtener_valor(self, nombre: str, llaves: []):
     retorno = self.lista_variables.get(nombre, None)
     if retorno is None:
         return Valor(0, 0)
     else:
         if retorno.tipo == 2:
             return retorno.cadena_arreglo(llaves, nombre, self)
         elif retorno.tipo == 4:
             return retorno.sacar_arreglo(llaves, nombre, self)
         elif retorno.tipo == 5:
             return self.arreglo_obtener_valor(retorno.contenido.destino,
                                               llaves)
         else:
             self.cargar_error(
                 "El Registro " + nombre + " No Se Ha Inicializado", 0,
                 (0, 0))
Пример #10
0
def read():
    tipo_resultante = 2
    S = App()
    (S.getText())
    rst = S.leido  #input("")
    # rst = input()
    x = re.search("^\d+\.\d+$", rst)
    if x is not None:
        tipo_resultante = 1
        rst = float(rst)
    else:
        x = re.search("^\d+$", rst)
        if x is not None:
            tipo_resultante = 0
            rst = int(rst)
    print(tipo_resultante)
    return Valor(rst, tipo_resultante)
Пример #11
0
    def variable_obtener_valor(self, nombre: str):
        retorno = self.lista_variables.get(nombre, None)

        if retorno is None:
            retorno = Valor(0, 0)
            print("El Registro " + nombre + " No Se Ha Inicializado")
            self.cargar_error(
                "El Registro " + nombre + " No Se Ha Inicializado", 0, (0, 0))
            return retorno
        else:
            if (retorno.tipo == 4):
                return copy.deepcopy(retorno)
            if (retorno.tipo == 5):

                return retorno.contenido.ejecutar()
            else:
                return retorno
Пример #12
0
    def arreglo_cambiar_valor(self, nombre: str, llaves: [], vaue: Valor):
        # Si El Valor Es Una Referencio
        if vaue.tipo == 5:
            nombre = vaue.contenido.destino
            llaves = vaue.contenido.lst

        retorno = self.lista_variables.get(nombre, None)
        if retorno is None:
            self.lista_variables[nombre] = Valor({}, 4)
            retorno = self.lista_variables.get(nombre, None)
            retorno.guardar_arreglo(llaves, vaue, nombre, self)
        else:
            if retorno.tipo == 2:
                retorno.guardar_cadena_arreglo(llaves, nombre, self, vaue)
            elif retorno.tipo == 4:
                retorno.guardar_arreglo(llaves, vaue, nombre, self)
            elif retorno.tipo == 5:
                self.arreglo_cambiar_valor(retorno.contenido.destino, llaves,
                                           vaue)
            else:
                self.cargar_error(
                    "El Registro 11" + nombre + str(llaves) +
                    " No Se Ha Inicializado", 0, (0, 0))
Пример #13
0
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)
Пример #14
0
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)
Пример #15
0
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)
Пример #16
0
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)
Пример #17
0
def multiplicar(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()
        elif param2.tipo==1:
            #Decimal
            tipo_resultante = 1
            rst = param1.dar_valor() * param2.dar_valor()
        else:
            Ts.cargar_error(
                "Error En La Multiplicacion Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0,
                ((0, 0)))
            print("Error En La Multiplicacion 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 Multiplicacion Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0,
                ((0, 0)))
            print("Error En La Multiplicacion Con Tipos: "+param1.dar_tipo_str()+","+param2.dar_tipo_str())
    else:
        Ts.cargar_error("Error En La Multiplicacion Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0,
                        ((0, 0)))
        print("Error En La Multiplicacion Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str())

    return Valor(rst, tipo_resultante)
Пример #18
0
def array():
    return Valor({}, 4)