def VerificarInstruccionesListaDeclaraciones(ArbolInstrucciones,tipoRobot): ''' * Descripción de la función: Dado un árbol de instrucciones, un tipo y una tabla de símbolos verifica la correctitud semántica 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(Ultimo) 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 expresión 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 línea", 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 TablaLocal.tipo = aux.condicion.type ListaTablas += [TablaLocal] aux = aux.sig return ListaTablas