Пример #1
0
def CrearTablaSimbolos(ListaIdentificadores,tipoRobot,instrucciones):
    '''
      * Descripción de la función: Dada una lista de identificadores y un 
        tipo crea una tabla de símbolos y a su vez va chequeando si 
        existe una redeclaración.
      * Variables de entrada: 
            - ListaIdentificadores: Lista enlazada de identificadores.
            - tipoRobot: Tipo de los valores que almacenarán los 
              identificadores.
      * Variables de salida: 
            - Ninguno.
    '''

    global Ultimo
    aux = ListaIdentificadores
    Tabla = TablaSimbolos(Ultimo)
    Tabla.instrucciones = instrucciones
    Ultimo = Tabla

    while (aux != None) :

        redeclaracion, tablaEncontrada = Tabla.buscar(aux.value)

        if (redeclaracion != None):
            print("Error en la línea",aux.numeroLinea,
                ": Redeclaración de la variable","\'"+str(aux.value)+"\'.")
            sys.exit()
        else:
            Tabla.insertar(aux.value,tipoRobot,"robot")

        aux = aux.sig

    # Se inserta 'me' en la tabla:
    Tabla.insertar("me",tipoRobot)
Пример #2
0
def VerificarInstruccionesListaDeclaraciones(ArbolInstrucciones,tipoRobot):

    '''
      * Descripción de la función: Esta funcion dado un arbol de instrucciones,un 
                                    tipo y una tabla de simbolos verifica la 
                                    correctitud semantica de las instrucciones
                                    de la lista de declaraciones del lenguaje 
                                    BOT.

      * Variables de entrada: 
            - ArbolInstrucciones: Lista enlazada de instrucciones.
            - tipoRobot: Tipo de variables (tipo del robot).

      * Variables de salida: 
            - ListaTablas: Arreglo de tabla de simbolos.
    '''

    ListaTablas = []
    aux = ArbolInstrucciones

    while (aux!=None):

        instrucciones = aux.instrucciones
        TablaLocal = TablaSimbolos()
        TablaLocal.insertar("me",tipoRobot)
        while (instrucciones!=None):    

            # Se verifican las expresiones de las instrucciones STORE,DROP,
            #  RIGHT, LEFT, UP y DOWN
            if (instrucciones.type in {"STORE","DROP","right","left","up","down"}):

                Tipo = VerificarExpresionBinaria(instrucciones.expresiones,
                                                TablaLocal)

                if (instrucciones.type in {"right","left","up","down"}):

                    if (Tipo!=None):
                        VerificarTipoVariable(Tipo,"int",
                            instrucciones.numeroLinea)

                # El tipo de expresion de la instruccion STORE debe ser
                # igual al tipo del robot.
                elif (instrucciones.type == "STORE"):
                    VerificarTipoVariable(Tipo,tipoRobot,
                        instrucciones.numeroLinea)

            # Se verifican los identificadores de las instrucciones COLLECT 
            # y READ.
            elif (instrucciones.type in {"COLLECT","READ"}):

                identificador = instrucciones.identificador
                if (identificador!=None):
                    resultado = TablaLocal.buscarLocal(identificador.value)
 
                    if(resultado!=None):
                        
                        print("Error en linea",
                            identificador.numeroLinea ,": La variable \'"+
                            str(identificador.value)+"\' ha sido redeclarada.")
                        sys.exit()

                    else:
                        # Se almacenan las nuevas variables a la tabla.
                        TablaLocal.insertar(identificador.value,
                            tipoRobot,aux.condicion.type)

      
            instrucciones = instrucciones.sig
        ListaTablas += [TablaLocal]    

        aux = aux.sig