Automa a stati finiti non deterministico generalizzato
Un automa a stati finiti non deterministico generalizzato, in breve GNFA, è un automa non deterministico che sulle transizioni non ha necessariamente soltanto simboli dell’alfabeto, ma può avere un’espressione regolare.
Definizione
Il GNFA ci servirà nell’algoritmo di conversione di un automa a stati finiti in un’espressione regolare. Un GNFA è quindi un NFA le cui transizioni sono definite da espressioni regolari. Un esempio di GNFA:
Vediamo che, per esempio, dallo stato q2 parte una transizione verso lo stato qf etichettata con l’espressione regolare a∗ b. Altri requisiti per un GNFA:
- Lo stato iniziale q0 deve avere una transizione verso tutti gli altri stati. In figura vediamo che dallo stato q0 partono transizioni verso tutti gli altri stati.
- In un GNFA esiste un solo stato finale e tutti gli altri stati hanno una transizione verso questo stato. Come si vede in figura, tutti gli stati hanno una freccia diretta verso qf.
- Lo stato iniziale non può coincidere con lo stato finale. Un GNFA ha quindi almeno due stati.
- Tutti gli altri stati, tranne quello iniziale e quello finale, devono avere transizioni verso tutti gli altri stati, tranne quello iniziale e quello finale. Compresi i cappi (transizione dallo stato qi allo stato qi).
Conversione di un NFA ordinario in GNFA
Se abbiamo un NFA, la conversione in GNFA è semplice.
- Creiamo un nuovo stato iniziale qs e una ε-transizione verso il vecchio stato iniziale.
- Creiamo un nuovo stato finale qf e da tutti i vecchi stati finali tracciamo ε-transizioni verso qf. I vecchi stati finali diventano stati normali.
- Se da qualche parte esiste una transizione multipla (cioè se dallo stato q1 si arriva allo stato q2 sia con il simbolo 0 sia con il simbolo 1), uniamo queste regole in un’unica espressione regolare e colleghiamo tutti i simboli originali con l’operatore di unione (cioè etichettiamo la freccia con l’espressione regolare 0|1).
- Se nell’automa manca una transizione che secondo la definizione dovrebbe esserci, la creiamo e la etichettiamo con l’espressione regolare ∅. Così non cambiamo il linguaggio accettato dall’automa, perché una transizione del genere non verrà mai eseguita.
Possiamo usare questo automa per convertire un automa in un’espressione regolare.
Capitoli: Espressioni regolari, Conversione di un’espressione regolare in automa, Automa a stati finiti non deterministico generalizzato, Conversione di un automa in espressione regolare