4.4 Von einer regulären Grammatik zu einem endlichen Automaten
In diesem Unterkapitel wollen wir das Gelernte an einem konkreten Beispiel anwenden.
Wir beginnen (1) mit einer Beschreibung eines Formats in natürlicher Sprache; (2) basteln uns
daraus
mit Hilfe des "Baukastenprinzips" eine reguläre Sprache; (3) säubern diese, indem wir Regeln
der Form
1. Beschreibung des Formats in natürlicher Sprache
Unsere Sprache .
separiert sind.
Jedes Label ist eine nichtleere Folge von Blöcken (ein nichtleerer String aus Buchstaben und
Zahlen), separiert
durch :
oder -
aber niemals durch beides innerhalb eines Blockes.
Also:
bla:bla:blue.xyz-12-zx.b:x:yyy:xxx:aaa
a:b-c.hello
:
und -
mischt.
Habe ich
2. Eine reguläre Grammatik
Beginnen wir mit dem Alphabet.
Da es 62 alphanumerische Zeichen gibt: a..zA..Z0..9
und wir uns keine unnötige
Arbeit machen wollen,
beschränken wir uns auf ein Zeichen: a
. Dazu kommen die Separatoren
:-.
. Also:
Als nächstes führen wir ein nichtterminales Symbole :
ein
und ein Nichtterminal -
. Wir wählen die Buchstaben :
auf Englisch colon und -
dash heißt.
Von .
separiert, müssen also wieder
Theorem 4.1.14 anwenden, dieses
mal auf die von
Um eine "richtig" reguläre Sprache zu erhalten, entzerren wir die erweitert regulären
Produktionen
wie
3. Die reguläre Grammatik säubern
Wir wollen nun alle Produktionen der Form
In einem zweiten Schritt wollen wir die Produktionen
4. Einen nichtdeterministischen endlichen Automaten bauen
Dies sollte nun einfach sein. Wir erschaffen Zustände
Ich habe die Zeichen .:-
rot unterlegt, weil man sie sonst kaum erkennen würde in
dem Automaten.
5. Den nichtdeterministischen Automaten in einen deterministischen umwandeln
Unser nichtdeterministischer endlicher Automat hat Zustandsmenge
Der nichtdeterministische Automat
Der deterministische Automat, Schritt für Schritt gebaut:
Dieser Automat hat deutlich weniger also 128 Zustände, nämlich mit nur sieben genau so viele wie der nichtdeterministische (es ist Zufall, dass beide gleich viele Zustände haben; messen Sie dieser Tatsache keine Bedeutung bei). Wir könnten nun von diesem Automaten ausgehend wiederum eine reguläre Grammtik bauen, die in diesem Falle sogar einfacher und klarer wäre als die ursprüngliche. Wenn wir erweitert reguläre Grammatiken erlauben, so können wir den deterministischen Automaten besonders konzise in eine Grammatik fassen:
Die Zustände des deterministischen Automaten beschreiben im Prinzip das, was wir uns merken
müssen, wenn wir so einen String "parsen": Zustand :
oder eines mit -
ist.
Der Zustand :
.
Übungsaufgabe 4.4.1
Erinnern Sie sich an Aufgabe 4.3.1. Hier
sehen
Sie einen nichtdeterministischen endlichen Automaten für die Sprache
Dieser Automat hat 11 Zustände. Sein Potenzmengenautomat hätte also