Example #1
0
	def Cerradura_Opcional (self):
		#Se crea un nuevo estado inicial
		Nuevo_Inicio = Estado ()
		#Se crea un nuevo estado final
		Nuevo_Fin = Estado ()
		#Se agrega una transición del nuevo estado inicial al estado inicial del AFN
		Nuevo_Inicio.AddTransition (self.Estado_Inicial, '')
		#Se agrega una transición del nuevo estado inicial al nuevo estado final
		Nuevo_Inicio.AddTransition (Nuevo_Fin, '')
		#Agregar una transición con epsilon de todos los estados finales al nuevo estado final
		for e in self.Estados_Aceptacion:
			e.AddTransition (Nuevo_Fin, '')
			e.Estado_Aceptacion = False
		#Eliminar los estados de aceptación del AFN
		self.Estados_Aceptacion = set ()
		#Agregar el nuevo estado de inicio al conjunto de estados del nuevo AFN
		self.Estados.add (Nuevo_Inicio)
		#Agregar el nuevo estado final al conjunto de estados del nuevo AFN
		self.Estados.add (Nuevo_Fin)
		#Se asigna el estatus de estado de aceptación al nuevo estado final
		Nuevo_Fin.Estado_Aceptacion = True
		#Se agrega el nuevo estado final al conjunto de estados de aceptación
		self.Estados_Aceptacion.add (Nuevo_Fin)
		#Se actualiza el estado inicial del AFN
		self.Estado_Inicial = Nuevo_Inicio
		return self
Example #2
0
	def Unir_AFN (self, AFN_2):
		#Se crea un nuevo estado inicial
		Nuevo_Inicio = Estado ()
		#Se crea un nuevo estado final
		Nuevo_Fin = Estado ()
		#Se agrega una transición del nuevo estado inicial al estado inicial del AFN_1
		Nuevo_Inicio.AddTransition (self.Estado_Inicial, '')
		#Se agrega una transición del nuevo estado inicial al estado inicial del AFN_2
		Nuevo_Inicio.AddTransition (AFN_2.Estado_Inicial, '')
		#Agregar una transición con epsilon de todos los estados finales al nuevo fin
		for e in self.Estados_Aceptacion:
			e.AddTransition (Nuevo_Fin, '')
			e.Estado_Aceptacion = False
		#Agregar una transición con epsilon de todos los estados finales al nuevo fin
		for e in AFN_2.Estados_Aceptacion:
			e.AddTransition (Nuevo_Fin, '')
			e.Estado_Aceptacion = False
		#Eliminar los estados de aceptación de ambos automatas
		self.Estados_Aceptacion = set ()
		AFN_2.Estados_Aceptacion = set ()
		#Agregar el nuevo estado de inicio al conjunto de estados del nuevo AFN
		self.Estados.add (Nuevo_Inicio)
		#Agregar el nuevo estado final al conjunto de estados del nuevo AFN
		self.Estados.add (Nuevo_Fin)
		#Se hace la union de alfabetos
		self.Estados = self.Estados.union (AFN_2.Estados)
		#Se asigna el estatus de estado de aceptación al nuevo estado final
		Nuevo_Fin.Estado_Aceptacion = True
		#Se agrega el nuevo estado final al conjunto de estados de aceptación
		self.Estados_Aceptacion.add (Nuevo_Fin)
		#Se actualiza el estado inicial del AFN
		self.Estado_Inicial = Nuevo_Inicio
		#Se actualiza el alfabeto del AFN con la unión de los alfabetos
		self.Alfabeto = (self.Alfabeto).union (AFN_2.Alfabeto)
		return self
Example #3
0
 def __init__(self, simbolo=''):
     #Si no se recibe ningun simbolo, se inicializa todo a vacío
     if (len(simbolo) == 0):
         #Inicialización del estado inicial a 'null'
         self.Estado_Inicial = None
         #El conjunto del alfabeto se inicializa como un conjunto vacío
         self.Alfabeto = set()
         #El conjunto de estados se inicializa como un conjunto vacío
         self.Estados = set()
         #El conjunto de estados de aceptación se inicializa como un conjunto vacío
         self.Estados_Aceptacion = set()
     #Si se recibe un simbolo, se crea un AFN básico
     else:
         #Se crea un estado inicial de tipo Estado como atributo del AFN
         self.Estado_Inicial = Estado()
         #Se crea un estado final de tipo Estado
         Estado_Final = Estado()
         #Se cambia el estado de la bandera a true para saber que es estado final
         Estado_Final.Estado_Aceptacion = True
         #El conjunto del alfabeto se inicializa como un conjunto vacío
         self.Alfabeto = set()
         #Se agrega el símolo al alfabeto del AFN (si es un rango, se añaden todos los simbolos)
         if (len(simbolo) == 1):
             self.Alfabeto.add(simbolo)
             #Se agrega una transición del estado inicial al estado final con el caracter 'simbolo'
             (self.Estado_Inicial).AddTransition(Estado_Final, simbolo)
         else:
             (self.Estado_Inicial).AddTransition(Estado_Final, simbolo[0],
                                                 simbolo[2])
             for i in range(ord(simbolo[0]), ord(simbolo[2]) + 1):
                 self.Alfabeto.add(chr(i))
         #El conjunto de estados se inicializa como un conjunto vacío
         self.Estados = set()
         #Se agregan los estados al conjunto de Estados del AFN
         self.Estados.add(self.Estado_Inicial)
         self.Estados.add(Estado_Final)
         #El conjunto de estados de aceptación se inicializa como un conjunto vacío
         self.Estados_Aceptacion = set()
         #Se agrega el estado final del AFN como un estado de aceptación
         self.Estados_Aceptacion.add(Estado_Final)