def run(self):
     """
     Corrida de la instruccion
     """
     global BotSymbolTable
     global currentBotType
     global currentBotValue
     global currentBotHorPosicion
     global currentBotVerPosicion
     j = 0
     # Por cada bot
     for j in range(0,len(self.identList)):
         # Buscamos los datos actuales del bot
         simbolo = BotSymbolTable.buscarSimbolo(self.identList[j])
         # Guardamos sus datos en variables globales
         currentBotType = simbolo.obtenerTipo()
         currentBotValue = simbolo.obtenerValor()
         currentBotHorPosicion = simbolo.horPosicion
         currentBotVerPosicion = simbolo.verPosicion
         # Creamos un nuevo nivel de tabla de simbolos
         BotSymbolTable = TablaDeSimbolos(deepcopy(BotSymbolTable))
         # Creamos un simbolo Me con los datos del bot actual
         symbolMe = Simbolo("me",currentBotType,currentBotValue)
         symbolMe.horPosicion = currentBotHorPosicion
         symbolMe.verPosicion = currentBotVerPosicion
         symbolMe.activado = True
         # Agregamos el simbolo a la tabla
         BotSymbolTable = BotSymbolTable.agregarATabla(symbolMe.obtenerIdentificador(),symbolMe)
         # Si el bot esta desactivado procedemos
         if simbolo.activado == False:
             # Marcamos el bot como activado
             BotSymbolTable.actualizarEstadoSimbolo(self.identList[j],True)
             # Buscamos el comportamiento correspondiente
             for behavior in simbolo.tablaDeComportamientos:
                 if behavior.condition == 'activation':
                     # Corremos las instrucciones del comportamiento
                     result = behavior.run()
                     # Si la operacion devuelve un resultado actualizamos el valor del bot
                     if result != None:
                         BotSymbolTable.actualizarValorDeSimbolo(self.identList[j],result.obtenerValor())
                         BotSymbolTable.actualizarPosicionHorSimbolo(self.identList[j],result.horPosicion)
                         BotSymbolTable.actualizarPosicionVerSimbolo(self.identList[j],result.verPosicion)
                     break
         # El Bot ya estaba activo, ERROR
         else:
             print("ERROR: " +self.identList[j]+ " ya se encontraba activo")
             exit()
 def run(self):
     """
     Corrida de la instruccion
     """
     global BotSymbolTable
     global currentBotType
     global currentBotValue
     global currentBotHorPosicion
     global currentBotVerPosicion
     # Por cada bot
     for j in range(0,len(self.identList)):
         # Buscamos los datos actuales del bot
         simbolo = BotSymbolTable.buscarSimbolo(self.identList[j])
         # Guardamos sus datos en variables globales
         currentBotType = simbolo.obtenerTipo()
         currentBotValue = simbolo.obtenerValor()
         currentBotHorPosicion = simbolo.horPosicion
         currentBotVerPosicion = simbolo.verPosicion
         # Creamos un nuevo nivel de tabla de simbolos
         BotSymbolTable = TablaDeSimbolos(deepcopy(BotSymbolTable))
         # Creamos un simbolo Me con los datos del bot actual
         symbolMe = Simbolo("me",currentBotType,currentBotValue)
         symbolMe.horPosicion = currentBotHorPosicion
         symbolMe.verPosicion = currentBotVerPosicion
         symbolMe.activado = simbolo.activado
         # Agregamos el simbolo a la tabla
         BotSymbolTable = BotSymbolTable.agregarATabla(symbolMe.obtenerIdentificador(),symbolMe)
         # Inicializamos las variables referentes al comportamiento default
         defaultEnabled = True
         defaultPosicion = None
         # Si el bot esta activado procedemos
         if simbolo.activado == True:
             # Buscamos comportamientos personalizados
             for i in range(0,len(simbolo.tablaDeComportamientos)):
                 # Buscamos los comportamientos con expresiones
                 if (type(simbolo.tablaDeComportamientos[i].condition) is ExpresionParentizada or
                     type(simbolo.tablaDeComportamientos[i].condition) is ExpresionBooleana or
                     type(simbolo.tablaDeComportamientos[i].condition) is ExpresionRelacional):
                     # Si ya se ha encontrado default entonces hay un ERROR
                     if defaultPosicion != None:
                         print("ERROR: Default definido antes que comportamiento con expresion")
                         exit()
                     # Buscamos el primero que se cumpla
                     if simbolo.tablaDeComportamientos[i].condition.evaluar(BotSymbolTable) == True:
                         result = simbolo.tablaDeComportamientos[i].run()
                         # Si la operacion devuelve un resultado actualizamos el valor del bot
                         if result != None:
                             BotSymbolTable.actualizarValorDeSimbolo(self.identList[j],result.obtenerValor())
                             BotSymbolTable.actualizarPosicionHorSimbolo(self.identList[j],result.horPosicion)
                             BotSymbolTable.actualizarPosicionVerSimbolo(self.identList[j],result.verPosicion)
                         defaultEnabled = False
                         break
                 # Si encontramos el comportamiento default anotamos su posicion para compararla con la
                 # de los demas comportamientos
                 elif simbolo.tablaDeComportamientos[i].condition == 'default':
                     defaultPosicion = i
             # Si no se encontro ninguna condicion que se cumpla, utilizamos el comportamiento default
             if defaultEnabled: 
                 # Buscamos el comportamiento default
                 for behavior in simbolo.tablaDeComportamientos:
                     if behavior.condition == 'default':
                         result = behavior.run()
                         # Si la operacion devuelve un resultado actualizamos el valor del bot
                         if result != None:
                             BotSymbolTable.actualizarValorDeSimbolo(self.identList[j],result.obtenerValor())
                             BotSymbolTable.actualizarPosicionHorSimbolo(self.identList[j],result.horPosicion)
                             BotSymbolTable.actualizarPosicionVerSimbolo(self.identList[j],result.verPosicion)
                         break
         # El Bot no estaba activo, ERROR
         else:
             print("ERROR: " +self.identList[j]+ " no se encontraba activo")
             exit()