Example #1
0
def p_error(t):
    global Ts
    if t is None :
        Ts.cargar_error("Se Alcanzo El Fin Del Archivo", 20, (0,0))
        return

    Ts.exit_exec = 0
    tup=find_column(Ts.texto_analisis, t)
    Ts.cargar_error("El token con lexema \""+str(t.value)+"\" de tipo \""+str(t.type)+" \" ocasiono un  error sintactico",20,tup)
    print("Error sintáctico en '%s'" % t)



    # Read ahead looking for a closing '}'
    #t.lexer.skip(1)
    global  parsito

    while True:
        tok = parsito.token()  # Get the next token
        #print(tok)
        if not tok or tok.type == 'PUNTOCOMA':
            break

    tok=parsito.token()
    parsito.errok()
Example #2
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)
Example #3
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)
Example #4
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)
Example #5
0
 def ejecutar(self):
     condicion: Valor = self.booleano.ejecutar()
     if condicion.tipo == 0:
         if condicion.dar_valor() >= 1:
             return self.cuerpo.ejecutar()
     else:
         global Ts
         Ts.cargar_error(
             "En La Condicional Del IF Se Necesita El Tipo ENTERO ", 0,
             self.tupla)
Example #6
0
def t_error(t):
    from Contenido.LstInstruccion.ABCInstruccion import Ts
    global Ts
    tup = find_column(Ts.texto_analisis, t)
    Ts.cargar_error(
        "El token con lexema \"" + str(t.value[0]) +
        "\" ocasiono un  error lexico", 30, tup)

    print("Illegal character '%s'" % t.value[0])
    t.lexer.skip(1)
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)
Example #8
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)
Example #9
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)
Example #10
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)