Theoretische InformatikStackautomatErkennung von kontextfreien Sprachen | |
Wir hatten gesehen, dass die regulären Sprachen genau von den (nichtdeterministischen oder deterministischen) endlichen Automaten erkannt werden. Die kontextfreien Sprachen werden genau von den nichtdeterministischen Stackautomaten erkannt.
Ein Stackautomat ist ein endlicher Automat, der zusätzlich mit einem Stack
als Arbeitsspeicher ausgerüstet ist (Bild 1).
| |
| Bild 1: Prinzip des Stackautomaten | |
Zu Beginn der Verarbeitung steht ein Wort w am Anfang des Eingabebandes. Der Stack ist leer und der Automat befindet sich in seinem Startzustand.
In jedem Zustand kann der Stackautomat ein Zeichen des Eingabewortes lesen sowie das oberste Zeichen vom Stack lesen und entfernen, er kann ein Zeichen auf den Stack legen und einen Folgezustand annehmen.
Der Automat erkennt das Eingabewort, wenn er es vollständig gelesen hat und, je nach Version, einen Endzustand erreicht hat oder den Stack wieder vollständig geleert hat.
Definition: Ein nichtdeterministischer Stackautomat 1) ist ein Tupel
N = (Z, E, H, d, q, F).
Hierbei ist
| Z | eine endliche, nichtleere Menge von Zuständen, | |
| E | das Eingabealphabet, ferner sei E? = E {ε}, | |
| H | das Stackalphabet, ferner sei H? = H {ε}, | |
| d | die Übergangsrelation d Z E? H? H? Z, | |
q Z | der Startzustand, | |
F Z | die Menge der Endzustände. |
Die Übergangsrelation d wird in Form einer Tabelle dargestellt. Ein Element (s, e, h, h', s') der Übergangsrelation d hat folgende Bedeutung: Im Zustand s kann der Automat das Eingabezeichen e lesen, das Zeichen h vom Stack entfernen, das Zeichen h' auf den Stack legen und anschließend in den Zustand s' übergehen.
Ist e = ε, so vollführt der Automat einen Zustandsübergang, ohne ein Zeichen des Eingabewortes zu lesen. Er kann dabei ein Zeichen vom Stack entfernen, er kann auch ein Zeichen auf den Stack legen. Ist h = ε, so entfernt der Automat kein Zeichen vom Stack. Ist h' = ε, so legt der Automat kein Zeichen auf den Stack.
Wenn h' und s' eindeutig bestimmt sind, so ist der Stackautomat deterministisch. Ein deterministischer Stackautomat ist ein Spezialfall des nichtdeterministischen Stackautomaten, bei dem die Übergangsrelation eine partielle Funktion ist:
d : Z
E?
H?
H?
Z
Es gibt zwei Versionen von Stackautomaten, die sich darin unterscheiden, wie Wörter erkannt werden, nämlich entweder durch Erreichen eines Endzustandes oder durch Hinterlassen eines leeren Stacks. Diese beiden Möglichkeiten werden kurz als Erkennen durch Endzustand bzw. Erkennen durch leeren Stack bezeichnet.
Definition: Sei N ein Stackautomat.
Der Stackautomat erkennt das Wort w durch Endzustand, wenn es eine Folge von Zustandsübergängen gibt, die das Eingabewort w vollständig abarbeitet und einen Endzustand erreicht.
Der Stackautomat erkennt die Sprache L durch Endzustand, wenn er jedes Wort w
L durch Endzustand erkennt und jedes Wort w
L verwirft.
Der Stackautomat erkennt das Wort w durch leeren Stack, wenn es eine Folge von Zustandsübergängen gibt, die das Eingabewort w vollständig abarbeitet und einen leeren Stack hinterlässt.
Der Stackautomat erkennt die Sprache L durch leeren Stack, wenn er jedes Wort w
L durch leeren Stack erkennt und jedes Wort w
L verwirft.
Beispiel: Der folgende Stackautomat N = (Z, E, H, d, q, F) erkennt die Sprache { anbn | n
0 } durch leeren Stack.
| Z = | {0, 1} | |
| E = | {a, b} | |
| H = | {a} | |
| q = | 0 | |
| F = | ![]() | |
| d : |
| s | e | h | h' | s' |
|---|---|---|---|---|
| 0 | a | ε | a | 0 |
| 0 | b | a | ε | 1 |
| 1 | b | a | ε | 1 |
Der Stackautomat legt solange jedes gelesene a auf den Stack, bis er das erste b liest. Für jedes gelesene b entfernt er anschließend ein a vom Stack.
Der Stackautomat ist sogar deterministisch.
Die beiden Möglichkeiten des Erkennens durch Erreichen eines Endzustands bzw. durch leeren Stack sind bei nichtdeterministischen Stackautomaten gleichwertig.
Satz: Ein nichtdeterministischer Stackautomat, der eine Sprache L durch Endzustand erkennt, kann in einen nichtdeterministischen Stackautomaten, der dieselbe Sprache L durch leeren Stack erkennt, umgeformt werden und umgekehrt.
Beweis:
Leerer Stack
Endzustand
Ein Stackautomat, der eine Sprache L durch leeren Stack erkennt, wird folgendermaßen in einen Stackautomaten umgeformt, der die Sprache L durch Endzustand erkennt.
Zu Beginn wird zunächst ein spezielles neues Stackzeichen $ als Begrenzungszeichen auf den Stack gelegt. Ein Wort w
L wird dann nicht durch leeren Stack erkannt, sondern dadurch, dass nur noch das Zeichen $ im Stack steht. Mit diesem Zeichen wird vom jeweiligen Zustand s, in dem sich der Stackautomat dann befindet, ein Zustandsübergang in einen neuen Endzustand f durchgeführt.
Es kommt also zunächst das Tupel
| s | e | h | h' | s' |
|---|---|---|---|---|
| q' | ε | ε | $ | q |
zur Übergangsrelation hinzu. Hierbei ist q' der neue Startzustand des Stackautomaten, q der bisherige Startzustand.
Für jeden Zustand s
Z kommen ferner die Tupel
| s | e | h | h' | s' |
|---|---|---|---|---|
| s | ε | $ | ε | f |
zur Übergangsrelation hinzu. Hierbei ist f ein neuer Zustand, der Endzustand, d.h. es gilt F = {f}.
Beispiel:
Der Stackautomat aus dem vorigen Beispiel wird folgendermaßen umgeformt; die neuen Zustandsübergänge sind hellgelb hinterlegt:
| s | e | h | h' | s' |
|---|---|---|---|---|
| -1 | ε | ε | $ | 0 |
| 0 | a | ε | a | 0 |
| 0 | b | a | ε | 1 |
| 1 | b | a | ε | 1 |
| 0 | ε | $ | ε | 2 |
| 1 | ε | $ | ε | 2 |
Hierbei ist -1 der neue Startzustand q' und 2 ist der neu eingeführte Endzustand f.
Endzustand
leerer Stack
Umgekehrt kann ein Stackautomat, der eine Sprache L durch Erreichen eines Endzustands erkennt, in einen Stackautomaten umgeformt werden, der dieselbe Sprache L durch leeren Stack erkennt.
Zu Beginn wird ebenfalls wieder ein neues Stackzeichen $ als Begrenzungszeichen auf den Stack gelegt. Hierdurch ist gewährleistet, dass der ursprüngliche Stackautomat keinen leeren Stack hinterlässt.
Es kommt also zunächst das Tupel
| s | e | h | h' | s' |
|---|---|---|---|---|
| q' | ε | ε | $ | q |
zur Übergangsrelation hinzu. Hierbei ist s0' der neue Startzustand des Stackautomaten, q der bisherige Startzustand.
Es werden dann von jedem Endzustand aus Zustandsübergänge hinzugefügt, die den Stack leeren. Es kommen also Tupel der Form
| s | e | h | h' | s' |
|---|---|---|---|---|
| f | ε | h | ε | t |
| t | ε | h | ε | t |
für alle Endzustände f
F und alle Stackzeichen h
H (einschließlich des neuen Zeichens $) zur Übergangsrelation hinzu. Hierbei ist t ein neuer Zustand.
Aufgabe 1: Sei A = {a, b} ein Alphabet und sei L
A* mit
L = { w | na(w) = nb(w) }
die Sprache aller Wörter, die gleichviele a's und b's enthalten.
Geben Sie einen Stackautomaten an, der L durch leeren Stack erkennt.
Aufgabe 2: Geben Sie je einen Stackautomaten an, der die Sprache a*
anbn erkennt, und zwar
1) Andere gebräuchliche Bezeichnungen sind: Kellerautomat, Pushdown-Automat
Weiter mit: [Konstruktion eines nichtdeterministischen Stackautomaten] oder ![]() |
|
|
|