예제 #1
0
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)
예제 #2
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)
예제 #3
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)
예제 #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 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)
예제 #6
0
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)
예제 #7
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)
예제 #8
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)
예제 #9
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)
예제 #10
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)
예제 #11
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)
예제 #12
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)