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