Esempio n. 1
0
def p_instruccion5_error(p):
    '''instruccion5 : IDENTIFICADOR instruccion6 error'''
    global build_errors
    build_errors.append("Cuidado! Puede faltar ';'")
    types.push(p[1])
    pOper.push(p[1])
    if values.size() >= 1:
        global counter,temp_counter
        #For compatibility oepration
        valor = values.pop()
        tipo = types.pop()
        #For quadruples
        operder =pOper.pop()
        operizq = pOper.pop()
        operador = pilaO.pop()
        #Checks semantics
        respuesta_semantica = operacion_compatible(operador,valor,tipo)
        #Get logical directions for vm
        if respuesta_semantica == "":
            dir_der=obtener_direccion(operder)
            dir_izq=obtener_direccion(operizq)
        else:
            dir_der=obtener_direccion(operder)
            dir_izq=obtener_direccion(operizq)
            build_errors.append(respuesta_semantica)
        #Insert result to stack
        pOper.push("temp"+str(temp_counter))
        cuadruplos[counter] = [operador,dir_izq,dir_der,""]
        counter+=1
Esempio n. 2
0
def p_instruccion5_error(p):
    '''instruccion5 : IDENTIFICADOR instruccion6 error'''
    global build_errors
    build_errors.append("Cuidado! Puede faltar ';'")
    types.push(p[1])
    pOper.push(p[1])
    if values.size() >= 1:
        global counter, temp_counter
        #For compatibility oepration
        valor = values.pop()
        tipo = types.pop()
        #For quadruples
        operder = pOper.pop()
        operizq = pOper.pop()
        operador = pilaO.pop()
        #Checks semantics
        respuesta_semantica = operacion_compatible(operador, valor, tipo)
        #Get logical directions for vm
        if respuesta_semantica == "":
            dir_der = obtener_direccion(operder)
            dir_izq = obtener_direccion(operizq)
        else:
            dir_der = obtener_direccion(operder)
            dir_izq = obtener_direccion(operizq)
            build_errors.append(respuesta_semantica)
        #Insert result to stack
        pOper.push("temp" + str(temp_counter))
        cuadruplos[counter] = [operador, dir_izq, dir_der, ""]
        counter += 1
Esempio n. 3
0
def p_instruccion5(p):
    '''instruccion5 : IDENTIFICADOR instruccion6 ENDLINE'''
    types.push(p[1])
    pOper.push(p[1])
    if values.size() >= 1:
        global counter,temp_counter
        valor = values.pop()
        tipo = types.pop()
        operder =pOper.pop()
        operizq = pOper.pop()
        operador = pilaO.pop()
        #Checks semantics
        respuesta_semantica = operacion_compatible(operador,valor,tipo)
        global build_errors
        if respuesta_semantica == "":
            dir_der=obtener_direccion(operder)
            dir_izq=obtener_direccion(operizq)
        else:
            dir_der=obtener_direccion(operder)
            dir_izq=obtener_direccion(operizq)
            build_errors.append(respuesta_semantica)
        
        pOper.push("temp"+str(temp_counter))
        cuadruplos[counter] = [operador,dir_izq,dir_der,""]
        counter+=1
Esempio n. 4
0
def p_instruccion5(p):
    '''instruccion5 : IDENTIFICADOR instruccion6 ENDLINE'''
    types.push(p[1])
    pOper.push(p[1])
    if values.size() >= 1:
        global counter, temp_counter
        valor = values.pop()
        tipo = types.pop()
        operder = pOper.pop()
        operizq = pOper.pop()
        operador = pilaO.pop()
        #Checks semantics
        respuesta_semantica = operacion_compatible(operador, valor, tipo)
        global build_errors
        if respuesta_semantica == "":
            dir_der = obtener_direccion(operder)
            dir_izq = obtener_direccion(operizq)
        else:
            dir_der = obtener_direccion(operder)
            dir_izq = obtener_direccion(operizq)
            build_errors.append(respuesta_semantica)

        pOper.push("temp" + str(temp_counter))
        cuadruplos[counter] = [operador, dir_izq, dir_der, ""]
        counter += 1
Esempio n. 5
0
def p_exp2(p):
    '''exp2 : RESTA termino 
            | SUMA termino'''
    pass
    pilaO.push(p[1])
    if pilaO.top() == "+" or pilaO.top() == "-":
        global counter,temp_counter
        operador = pilaO.pop()
        operDer = pOper.pop()
        operIzq = pOper.pop()
        #Construction of structure for operations on vm
        dir_der = obtener_direccion(operDer)
        dir_izq = obtener_direccion(operIzq)
        dir_temp = obtener_direccion("temp"+str(temp_counter))
        pOper.push("temp"+str(temp_counter))
        temp_counter+=1
        cuadruplos[counter] = [operador,dir_izq,dir_der,dir_temp]
        counter+=1
Esempio n. 6
0
def p_exp2(p):
    '''exp2 : RESTA termino 
            | SUMA termino'''
    pass
    pilaO.push(p[1])
    if pilaO.top() == "+" or pilaO.top() == "-":
        global counter, temp_counter
        operador = pilaO.pop()
        operDer = pOper.pop()
        operIzq = pOper.pop()
        #Construction of structure for operations on vm
        dir_der = obtener_direccion(operDer)
        dir_izq = obtener_direccion(operIzq)
        dir_temp = obtener_direccion("temp" + str(temp_counter))
        pOper.push("temp" + str(temp_counter))
        temp_counter += 1
        cuadruplos[counter] = [operador, dir_izq, dir_der, dir_temp]
        counter += 1
Esempio n. 7
0
def p_termino3(p):
    '''termino3 : DIVISION varcte
                | MULTIPLICACION varcte'''
    pass
    pilaO.push(p[1])
    if (pilaO.top() == "*" or pilaO.top() == "/") and (pOper.size() > 1):
        global counter,temp_counter
        #To keep consistency in stacks
        operador = pilaO.pop()
        operDer = pOper.pop()
        operIzq = pOper.pop()
        #For operations
        dir_der = obtener_direccion(operDer)
        dir_izq = obtener_direccion(operIzq)
        dir_temp = obtener_direccion("temp"+str(temp_counter))
        pOper.push("temp"+str(temp_counter))
        temp_counter+=1
        cuadruplos[counter] = [operador,dir_izq,dir_der,dir_temp]
        counter+=1
Esempio n. 8
0
def p_termino3(p):
    '''termino3 : DIVISION varcte
                | MULTIPLICACION varcte'''
    pass
    pilaO.push(p[1])
    if (pilaO.top() == "*" or pilaO.top() == "/") and (pOper.size() > 1):
        global counter, temp_counter
        #To keep consistency in stacks
        operador = pilaO.pop()
        operDer = pOper.pop()
        operIzq = pOper.pop()
        #For operations
        dir_der = obtener_direccion(operDer)
        dir_izq = obtener_direccion(operIzq)
        dir_temp = obtener_direccion("temp" + str(temp_counter))
        pOper.push("temp" + str(temp_counter))
        temp_counter += 1
        cuadruplos[counter] = [operador, dir_izq, dir_der, dir_temp]
        counter += 1
Esempio n. 9
0
def p_laberinto(p):
    '''laberinto : laberinto3 laberinto1 laberinto2 varcte'''
    pass
    if values.size() >= 1:
        global counter,temp_counter
        valor = values.pop()
        tipo = types.pop()
        operation = pilaO.pop()
        operadorizq=pOper.pop()
        operador=pOper.pop()
        global build_errors
        ##Checks semantics
        respuesta_semantica = operacion_compatible(operation,tipo,valor)
        if respuesta_semantica == "":
            dir_izq = obtener_direccion(operadorizq)
            dir_der = obtener_direccion(operador)
            dir_temp = obtener_direccion("temp"+str(temp_counter))
        else:
            build_errors.append(respuesta_semantica)
            dir_izq = 0
            dir_der=0
            dir_temp=0
        #Creates structure of operators for vm
        temp_counter+=1
        cuadruplos[counter]=[operation,dir_izq,dir_der,dir_temp]
        counter+=1
        #In case of a negative operator
        if not negative.isEmpty():
            dir_temp2 = obtener_direccion("temp"+str(temp_counter))
            cuadruplos[counter]=[negative.pop(),dir_temp,"",dir_temp2]
            temp_counter+=1
            dir_temp = dir_temp2
            counter+=1
        pSaltos.push(counter)
        #Constructor of logic operator
        cuadruplos[counter]=["gotof",dir_temp,"",""]
        counter+=1
Esempio n. 10
0
def p_laberinto(p):
    '''laberinto : laberinto3 laberinto1 laberinto2 varcte'''
    pass
    if values.size() >= 1:
        global counter, temp_counter
        valor = values.pop()
        tipo = types.pop()
        operation = pilaO.pop()
        operadorizq = pOper.pop()
        operador = pOper.pop()
        global build_errors
        ##Checks semantics
        respuesta_semantica = operacion_compatible(operation, tipo, valor)
        if respuesta_semantica == "":
            dir_izq = obtener_direccion(operadorizq)
            dir_der = obtener_direccion(operador)
            dir_temp = obtener_direccion("temp" + str(temp_counter))
        else:
            build_errors.append(respuesta_semantica)
            dir_izq = 0
            dir_der = 0
            dir_temp = 0
        #Creates structure of operators for vm
        temp_counter += 1
        cuadruplos[counter] = [operation, dir_izq, dir_der, dir_temp]
        counter += 1
        #In case of a negative operator
        if not negative.isEmpty():
            dir_temp2 = obtener_direccion("temp" + str(temp_counter))
            cuadruplos[counter] = [negative.pop(), dir_temp, "", dir_temp2]
            temp_counter += 1
            dir_temp = dir_temp2
            counter += 1
        pSaltos.push(counter)
        #Constructor of logic operator
        cuadruplos[counter] = ["gotof", dir_temp, "", ""]
        counter += 1
Esempio n. 11
0
def p_convierte(p):
    '''convierte : HACERESCRITA OPENCOND expresion CLOSECOND'''
    pass
    pilaO.push(p[1])
    if values.size() >= 1:
        global counter,temp_counter
        valor = values.pop()
        values.push("escrita")
        tipo ="escrita"
        operizq =pOper.pop()
        operador = pilaO.pop()
        respuesta_semantica = operacion_compatible(operador,valor,tipo)
        global build_errors
        if respuesta_semantica == "":
            dir_izq=obtener_direccion(operizq)
            dir_temp = obtener_direccion("temp"+str(temp_counter))
        else:
            dir_izq=obtener_direccion(operizq)
            dir_temp = obtener_direccion("temp"+str(temp_counter))
            build_errors.append(respuesta_semantica)
        pOper.push("temp"+str(temp_counter))
        temp_counter+=1
        cuadruplos[counter] = [operador,dir_izq,"",dir_temp]
        counter+=1
Esempio n. 12
0
def p_convierte(p):
    '''convierte : HACERESCRITA OPENCOND expresion CLOSECOND'''
    pass
    pilaO.push(p[1])
    if values.size() >= 1:
        global counter, temp_counter
        valor = values.pop()
        values.push("escrita")
        tipo = "escrita"
        operizq = pOper.pop()
        operador = pilaO.pop()
        respuesta_semantica = operacion_compatible(operador, valor, tipo)
        global build_errors
        if respuesta_semantica == "":
            dir_izq = obtener_direccion(operizq)
            dir_temp = obtener_direccion("temp" + str(temp_counter))
        else:
            dir_izq = obtener_direccion(operizq)
            dir_temp = obtener_direccion("temp" + str(temp_counter))
            build_errors.append(respuesta_semantica)
        pOper.push("temp" + str(temp_counter))
        temp_counter += 1
        cuadruplos[counter] = [operador, dir_izq, "", dir_temp]
        counter += 1