Alle meine Lehrbücher verwenden denselben Algorithmus zum Erstellen eines DFA mit einem regulären Ausdruck: Erstellen Sie zuerst einen NFA, der die Sprache des regulären Ausdrucks erkennt, und konvertieren Sie dann den NFA mithilfe der Teilmengenkonstruktion (auch als "Powerset" bezeichnet) in einen äquivalenten DFA ( optional Minimierung des DFA). Ich hörte auch einmal einen Professor darauf hinweisen, dass es andere Algorithmen gibt. Kennt jemand welche? Vielleicht eine, die direkt vom regulären Ausdruck zu einem DFA ohne die Zwischen-NFA geht?
automata-theory
regular-expressions
dfa
BlueBomber
quelle
quelle
Antworten:
Es gibt verschiedene Algorithmen, um reguläre Ausdrücke in endliche Automaten umzuwandeln. Sie können direkt von regulären Ausdrücken zu DFAs wechseln, ohne zuerst einen anderen Automaten zu erstellen, indem Sie implizit die Teilmengenkonstruktion ausführen, während Sie den Automaten generieren. Eine andere Möglichkeit, deterministische Automaten direkt zu erhalten, ist die Verwendung der Methode der Derivate.
Die Überprüfung, ob ein regulärer Ausdruck die Sprache darstellt, die alle Zeichenfolgen enthält, ist ein vollständiges PSPACE-Problem ( eine Referenz finden Sie in dieser Antwort ). Wenn Sie überprüfen, ob ein DFA diese Sprache akzeptiert, kann dies in Polynomzeit erfolgen. Wenn Sie also direkt von einem regulären Ausdruck zu einem DFA wechseln, kommt es irgendwo zu einer Explosion.
Mein Verständnis der Literatur ist, dass wir Übersetzungen auswählen können, die es uns ermöglichen, die Explosion zu lokalisieren. Das heißt, es gibt verschiedene Wege, um von einem regulären Ausdruck zu einem endlichen Automaten zu gelangen, und Methoden, die linear oder polynomisch sind, werden bevorzugt. Normalerweise werden die exponentiellen Kosten in die Bestimmung von Automaten hineingeschoben.
Es wurde viel daran gearbeitet, Unterfamilien regulärer Ausdrücke zu identifizieren, aus denen wir effizient DFAs generieren können. Diese Arbeit hängt von der von Ihnen verwendeten Übersetzung ab. Das heißt, Sie korrigieren eine Zuordnung von regulären Ausdrücken zu NFAs und versuchen, die regulären Ausdrücke zu charakterisieren, die DFAs zugeordnet sind.
Die Standardkonstruktion von Automaten aus regulären Ausdrücken ist bei solchen Arbeiten nicht die bevorzugte Konstruktion . Die Konstruktionen der Wahl erzeugen Automaten, die der Struktur des regulären Ausdrucks sehr ähnlich sind. Diese Konstruktionen verwenden den Begriff einer Ableitung eines regulären Ausdrucks.
Wenn Sie sich einen Zustand eines Automaten als Darstellung aller von diesem Zustand akzeptierten Zeichenfolgen vorstellen, können Sie mit (Teil-) Ableitungen reguläre Ausdrücke als Zustände behandeln . Im Gegensatz zur Standard-Lehrbuchkonstruktion, bei der reguläre Ausdrücke intuitiv als Automaten und nicht als Zustände behandelt werden.
Die Entsprechung zwischen regulären Ausdrücken und Zuständen eines Automaten und Determinismus wird explizit von Berry und Sethi diskutiert, die den Begriff der Brzozowski-Derivate mit der Idee kombinieren, zwischen Vorkommen desselben Symbols zu unterscheiden, um eine syntaxbasierte Übersetzung regulärer Ausdrücke in endliche zu erhalten Automaten.
Dieses Papier baut auf früheren Arbeiten von Brüggemann-Klein auf und untersucht Fälle, in denen Sie Derivate verwenden können, um DFAs in Polynomzeit zu generieren. Es gibt eine Menge Arbeit nach diesem Papier. Aus Sicht der Webtechnologien war dies von Bedeutung, da reguläre Ausdrücke, die effizient manipuliert werden können (auch bekannt als DFAs), für die Verarbeitung von SGML und XML wichtig waren.
Es wurde viel gearbeitet, um andere Sonderfälle deterministischer regulärer Ausdrücke zu untersuchen. Eine kürzlich erschienene Arbeit, die untersucht, wann einige dieser Probleme in linearer Zeit gelöst werden können, stammt aus dem Jahr 2012.
quelle