5.2 Endliche Automaten

Grammatiken erlauben es uns, gewisse Formate zu beschreiben. Das reicht uns aber nicht: wir wollen Daten parsen, im engen Sinne also eine grammatische Ableitung rekonstruieren und allgemein die Struktur eines gegebenen Wortes herausarbeiten. Ein bescheideneres Ziel ist es, für ein gegebenes Wort zu entscheiden, ob es sich überhaupt aus einer Grammatik ableiten lässt. Für reguläre Grammatiken gibt es hierfür die endlichen Automaten. Sie können endliche Automaten verstehen als ein eingeschränktes Modell eines Rechners; oder als Blaupause für einen effizienten Algorithmus, um reguläre Grammatiken zu parsen.

Hier sehen Sie ein Beispiel für einen endlichen Automaten über dem Alphabet Σ={x,y,z}. Die Idee ist, dass der Automat ein Wort α Zeichen für Zeichen einliest. Die Pfeile zwischen den Kreisen (den Zuständen des Automaten) zeigen an, in welchen neuen Zustand beim Lesen eines Zeichen gewechselt werden muss. Der Pfeil "aus dem Nichts", hier der von links nach S, zeigt den Startzustand an, in welchem der Automat beginnt.

Um zu zeigen, wie der Automat ein Eingabewort verarbeitet, nehmen wir das Beispiel α=yxzxxyy.

In diesem Beispiel endet der Automat im Zustand Y. Sie sehen, dass der Zustand X mit einem doppelten Rand markiert ist: dies symbolisiert, dass X ein akzeptierender Endzustand ist. Wenn der Automat ein Wort α abgearbeitet hat, akzeptiert er es, wenn er in einem akzeptierenden Endzustand gelandet ist; ansonsten lehnt er es ab. In unserem Beispiel sehen wir also, dass der Automat das Eingabewort yxzxxyy ablehnt.

Definition 5.2.1 (Endlicher Automat, Finite State Machine). Ein endlicher Automat besteht aus einem endlichen Eingabealphaet Σ, einer endlichen Menge Q von Zuständen, einem Startzustand qstartQ, einer Menge FQ von akzeptierenden Endzuständen und einer Zustandsübergangsfunktion δ:Q×ΣQ . Formal gesehen ist also ein Automat ein Quintupel M=(Σ,Q,qstart,F,δ).

Die Idee ist, dass der Automat im Zustand qstart startet und nun in jedem Schritt ein weiteres Zeichen des Eingabewortes liest. Wenn er im Zustand q ist und das Zeichen x liest, so wechselt er in den Zustand δ(q,x). Statt δ(q,x)=q verwenden wir die leichter zu lesende Schreibweise qxq . Wenn das Wort zu Ende ist, dann akzeptiert der Automat, wenn er in einem akzeptierenden Zustand angekommen ist, also in F.

Beispiel 5.2.2 Betrachten wir den endlichen Automaten
und stellen ihn gemäß Definition 4.2.1 als Quintupel M=(Σ,Q,qstart,F,δ) dar mit Σ={x,y,z}Q={S,X,Y}qstart=SF={X} .

Um noch die Zustandsübergangsfunktion δ darzustellen, müssen wir uns überlegen, wie wir Funktionen überhaupt darstellen. Da δ eine endliche Funktion ist, können wir einfach alle Eingabewert-Ausgabewert-Paare hinschreiben, am Besten in einer Tabelle, so wie wir es bereits bei Booleschen Funktionen mit Wahrheitstabellen getan haben. δ ist also

qσδ(q,x)SxXSySSzSXxXXyYXzSYxYYyYYzY

Da die Funktion δ bei jedem endlichen Automaten genau zwei Eingabeparameter hat, können wir es eventuell übersichtlicher als zweidimensionale Tabelle darstellen:

xyzSXSSXXYSYYYY

Diese zwei Tabellen dienen in diesem Beispiel aber nur dazu, noch einmal zu illustrieren, was ich damit meine, wenn ich sage, dass δ eine Funktion von Q×Σ nach Q ist. Wenn Sie selbst an endlichen Automaten rumbasteln, empfehle ich Ihnen, die Funktion δ graphisch mit Kreisen und Pfeilen darzustellen, so wie wir es oben getan haben:

Das ist eine völlig legitime Notation für eine Funktion δ:Q×ΣQ und genau so formal wie die Tabellenschreibweise.

Definition 5.2.3 (Erweiterte Zuständsübergangsfunktion). Für einen endlichen Automaten (Σ,Q,qstart,F,δ) definieren wir die erweiterte Zustandsübergangsfunktion δ^:Q×ΣQ rekursiv wie folgt: δ^(q,ϵ)=qδ^(q,xα)=δ^(δ(x),α) . δ^(q,α)=q heißt also, dass der Automat, wenn er sich im Zustand q befindet und das Wort α abarbeitet, er danach im Zustand q landet. Wir schreiben auch kompakt qαq .
Definition 5.2.4 (Akzeptierte Sprache). Sei M=(Σ,Q,qstart,F,δ) ein endlicher Automat. Die von M akzeptierte Sprache ist L(M):={αΣ | δ^(qstart,α)F} .
Beispiel 5.2.5 Der endliche Automat, den wir oben bereits eingeführt haben:
akzeptiert die Sprache aller α{x,y,z}, die auf x enden und nicht die Buchstabenfolge xy enthalten.
Übungsaufgabe 5.2.1 Ändern Sie den Automaten aus dem letzten Beispiel so ab, dass die Bedingung "die auf x enden" entfällt, er also alle Wörter akzeptiert, die die Folge xy nicht enthalten.
Übungsaufgabe 5.2.2 Zeichnen Sie einen Automaten für die Sprache aller Wörter über {a,b,c,d}, die die Folge a,b,c,d enthalten.
Übungsaufgabe 5.2.3 Zeichnen Sie einen Automaten für die Sprache aller Wörter über {a,b,c,d}, die genau vier a enthalten.

Endliche Automaten zu regulären Grammatiken

Wenn wir einen endlichen Automaten gegeben haben, dann können wir leicht eine entsprechende reguläre Grammatik dazu bauen, indem wir alle Pfeile einfach in Produktionen übersetzen. Für den Automaten
würde dies beispielsweise die folgenden Produktionen ergeben: SyS | zS | xXXxX | zS | yYYxY | yY | zY und, weil X ein akzeptierender Zustand ist, Xϵ Dies geht ganz allgemein:
Theorem 5.2.6 Sei M=(Σ,Q,qstart,F,δ) ein endlicher Automat. Dann gibt es eine reguläre Grammatik G=(Σ,N,P,S) mit L(G)=L(M).

Wir nehmen dies als Anlass, um mal wieder einen Induktionsbeweis im Detail durchzuführen.

Beweis. Wir setzen N=Q und S=qstart und führen für jeden Zustandsübergang, der von δ beschrieben wird, eine Ableitungsregel ein: q1xq2 wird zur Produktion q1xq2 Hiermit erhalten wir eine "Zwischengrammatik" G. Die endgültige Grammatik G erhalten wir, indem wir für jeden akzeptierenden Zustand qN die Produktion qϵ einführen. Wir zeigen nun per Induktion:
Behauptung 5.2.7 Sei αΣ und q,qQ. Dann gilt qαq genau dann, wenn qαq in Grammatik G gilt.

Bevor wir diese Behauptung beweisen, achten Sie auf die Bedeutung der Symbole. Der einfache Pfeil in qαq beschreibt die Arbeitsweise des endlichen Automaten, dass nämlich das Verarbeiten von α den Automaten vom Zustand q in den Zustand q führt. Der doppelte Pfeil in qαq sagt aus, dass aus dem Nichtterminalsymbol q in der Grammatik G in möglicherweise mehreren Schritten die Wortform αq abgeleitet werden kann. Der Pfeil "lebt" also im Automaten M, der Pfeil lebt in der Grammatik G.

Beweis. Wir verwenden Induktion über die Länge des Wortes α.

Induktionsbasis. Wenn α=ϵ gilt, also α die Länge 0 hat, dann gilt qϵq genau dann, wenn q=q ist. Wie kann nun qϵq in G gelten? Beachten Sie, dass jede Produktion in G ein Terminalsymbol erzeugt; qϵq kann also nur gelten, wenn keine Produktion erfolgt ist und somit q=q gilt. Wir sehen: beide Aussagen sind äquivalent zu q=q und somit auch äquivalent zueinander.

Induktionsschritt. Wenn α die Länge n+1 hat, so schreiben wir α=xβ für ein Wort βΣ der Länge n. Per Induktionshypothese können wir nun davon ausgehen, dass für alle q1,q2Q die Aussage q1βq2 genau dann gilt, wenn q1βq2 gilt. Unser Ziel ist es, zu zeigen, dass die beiden folgenden Aussagen äquivalent sind:

  1. qxβq im endlichen Automaten M,
  2. qxβq in der Grammatik G.
Wir müssen beide Richtungen zeigen, also zeigen, dass aus Aussage (1) die Aussage (2) folgt und umgekehrt.

Aus (1) folgt (2). Nehmen wir also an, dass qxβq gilt und bezeichnen q1:=δ(q,x). Es gilt also qxq1βq Der erste Teil, also qxq1, bedeutet, dass wir in G die Produktion qxq1 eingeführt haben. Auf den zweiten Teil, also q1βq, können wir die Induktionshypothese anwenden und schließen, dass q1βq gilt. Nun können wir mit dem Nichtterminal q beginnen, die Produktion qxq1 anwenden und dann mit q1 fortfahrend die Wortform βq ableiten, also qxq1xβq . Dies zeigt die erste Richtung.

Aus (2) folgt (1). Nun nehmen wir an, dass qxβq gilt. Untersuchen wir die erste Produktion, die in dieser Ableitung verwendet worden ist. Alle Produktionen in G erzeugen ein Terminalsymbol, also muss es eine Produktion der Form qxq1 gewesen sein. Die Ableitung hat also die Form qxq1xβq , wir können also aus q1 die Wortform βq ableiten: q1βq. Auf diese Erkenntnis wenden wir die Induktionshypothese an und schließen, dass q1βq gilt. Die Produktionsregel qxq1 kann nur in G eingeführt worden sein, weil δ(q,x)=q1, also qxq1. Somit sehen wir, dass qxq1βq gilt, also zusammengenommen qxβq. Dies zeigt die zweite Richtung.

Hiermit endet der Induktionsbeweis.

Wir haben nun die Behauptung bewiesen. Als nächstens betrachten wir die Grammatik G und behaupten, dass L(G)=L(M) gilt. Sei αΣ, dann behaupten wir also, dass wir folgenden zwei Aussagen äquivalent sind:

  1. qstartαq für einen Zustand qF,
  2. qstartα in Grammatik G.

Wenn nun also qstartαq gilt und qF, dann wissen wir von der obigen Behauptung, dass es in G die Ableitung qstartαq gibt. Da qF ist, enthält G die Produktion qϵ, und somit können wir in G die Ableitung qstartαqα machen.

In der anderen Richtung, wenn qstartα in Grammatik G gilt, dann betrachten wir den letzten Ableitungsschritt. Da α keine Nichtterminalsymbole enthält, muss im letzten Ableitungsschritt ein Nichtterminalsymbol verschwunden sein. Die einzigen Produktionen in G bei denen das Nichtterminal verschwindet, sind von der Form qϵ, wenn q im Automaten M ein akzeptierender Endzustand ist. Sei nun also qϵ die Produktion, die im letzten Ableitungsschritt angewendet worden ist. Es gilt also qstartαqα. Beachten Sie nun weiter, dass all jene Produktionen, die in G aber nicht in G sind, die Form qϵ haben, also das Nichtterminalsymbol verschwinden lassen; es kann in einer Ableitung also nur eine solche Produktion angewandt worden sein, und das ganz zum Schluss. Das heißt: die Ableitung qstartαq verwendet ausschließlich G-Produktionen. Somit können wir die oben gezeigte Behauptung anwenden und folgern, dass qstartαq gilt. Dies ist genau Punkt 1, den wir zeigen wollten.

Beachten Sie, dass dieser Beweis eigentlich gar nicht so schwierig ist, wie er hier aussieht. Ich habe ihn absichtlich sehr formal und ausführlich geschrieben, um Ihnen das Prinzip des Induktionsbeweises ins Gedächtnis zu rufen.

Übungsaufgabe 5.2.4 Schreiben Sie zu folgendem Automaten über dem Alphabet Σ={0,1,2,3,4,5,6,7,8,9} eine äquivalente reguläre Grammatik:
und beschreiben Sie die Sprache in eigenen Worten.

Reguläre Grammatiken zu endlichen Automaten?

Im letzten Abschnitt haben wir gesehen, wie wir zu einem gegebenen endlichen Automaten recht einfach eine äquivalente reguläre Grammatik schreibne können. Es drängt sich die Frage auf: geht das auch umgekehrt? Versuchen wir es. Zu jedem "Grammatik-Pfeil" XaY bauen wir uns einen "Automaten-Pfeil" XaY.

Beispiel 5.2.8 Betrachten wir die reguläre Grammatik aus dem vorherigen Kapitel 4.1: Sϵ | aS | bTTϵ | bT .

Versuchen wir, daraus einen endlichen Automaten zu bauen. Als Zustandsmenge nehmen wir die Menge nichtterminaler Symbole {S,T}, als Startzustand das Startsymbol S. Zustandsübergänge ergeben sich aus den Produktionsregeln, wobei wir für Produktionen der Form Aϵ den Zustand A zu einem Endzustand machen. Also:

Wie Sie sehen, ist das nicht ganz korrekt. Als erstes fällt ins Auge, dass alle Zustände akzeptierende Endzustände sind. Als zweites fällt uns auf, dass es bei T für das Eingabesymbol a keinen ausgehenden Pfeil gibt. Der Funktionswert δ(T,a) ist also undefiniert. Der Grund hierfür ist, dass, wenn erst mal ein b vorgekommen ist, eben kein a mehr vorkommen darf. Die Definition eines endlichen Automaten verlangt aber, dass δ eine Funktion ist, also für alle Eingabewerte definiert ist. Wir lösen das, indem wir einen sogenannten Fehlerzustand (Trap State) einführen, der im Prinzip den Zustand lehne das Wort ab, egal, was noch kommt versinnbildlicht:

Dies ist nun unser endlicher Automat M mit L(M)=L(G).

Beispiel 5.2.9 Betrachten wir die reguläre Grammatik aus dem vorherigen Kapitel 4.1: A0A |1A |1BB0C |1CC0D |1DD0E |1EEϵ  Wobei wir aus dem vorherigen Beispiel lernen und einen Fehlerzustand einführen:

Leider ist diese Lösung auch nicht korrekt: jetzt gibt es zu viele Pfeile! Aus dem Zustand A gehen zwei Pfeile mit 1 beschriftet hinaus. Wenn wir uns vor Augen halten, was die von G erzeugte Sprache ist, so wird das Problem klarer: G erzeugt die Sprache aller Wörter über {0,1}, deren viertletztes Zeichen eine 1 ist. Die Herausforderung ist nun: wenn der Automat eine 1 liest, dann weiß er nicht, ob das jetzt schon das viertletzte Zeichen ist oder nicht; er weiß also nicht, ob er im Zustand A bleiben soll oder weiter zum Zustand B gehen soll.

Um mit Fällen wie dem eben geschilderten umgehen zu können, erweitern wir die Definition des endlichen Automaten in nächsten Kapitel zu einem nichtdeterministischen endlichen Automaten.