Gegeneraliseerde niet-deterministische eindige automaat
Een gegeneraliseerde niet-deterministische eindige automaat, kortweg GNFA, is een niet-deterministische automaat die op de overgangen niet alleen symbolen uit het alfabet hoeft te hebben, maar ook een reguliere expressie.
Definitie
De GNFA hebben we nodig tijdens het algoritme voor het omzetten van een eindige automaat naar een reguliere expressie. Een GNFA is dus een NFA waarvan de overgangen met reguliere expressies zijn gedefinieerd. Een voorbeeld van zo'n GNFA:
We zien dat bijvoorbeeld vanuit toestand q2 een overgang naar toestand qf loopt die is gelabeld met de reguliere expressie a∗ b. Verdere eisen aan een GNFA:
- De begintoestand q0 moet een overgang hebben naar alle andere toestanden. In de figuur zien we dat vanuit toestand q0 overgangen naar alle andere toestanden lopen.
- In een GNFA is er maar één eindtoestand en alle andere toestanden hebben een overgang naar deze toestand. Zoals in de figuur te zien is, hebben alle toestanden een pijl die naar qf wijst.
- De begintoestand mag niet dezelfde zijn als de eindtoestand. Een GNFA heeft dus minstens twee toestanden.
- Alle andere toestanden, behalve de begin- en de eindtoestand, moeten overgangen hebben naar alle andere toestanden, behalve de begin- en de eindtoestand. Inclusief lussen (een overgang van toestand qi naar toestand qi).
Omzetting van een gewone NFA naar een GNFA
Als we een NFA hebben, is het omzetten naar een GNFA eenvoudig.
- We maken een nieuwe begintoestand qs en maken een epsilonovergang naar de oorspronkelijke begintoestand.
- We maken een nieuwe eindtoestand qf en trekken vanuit alle oorspronkelijke eindtoestanden epsilonovergangen naar toestand qf. Van de oorspronkelijke eindtoestanden maken we gewone toestanden.
- Als er ergens een meervoudige overgang bestaat (dus als we vanuit toestand q1 zowel via symbool 0 als via symbool 1 in toestand q2 komen), voegen we deze regels samen tot één reguliere expressie en verbinden we alle oorspronkelijke symbolen met de operator vereniging (dus we labelen de pijl met de reguliere expressie 0|1).
- Als in de automaat een overgang ontbreekt die er volgens de definitie zou moeten zijn, maken we die en labelen we hem met de reguliere expressie ∅. Daarmee veranderen we de taal die de automaat accepteert niet, omdat zo'n overgang nooit wordt genomen.
Deze automaat kunnen we gebruiken om een automaat om te zetten naar een reguliere expressie.
Hoofdstukken: Reguliere expressies, Omzetting van een reguliere expressie naar een automaat, Gegeneraliseerde niet-deterministische eindige automaat, Omzetting van een automaat naar een reguliere expressie