Kellerautomat

Ein Kellerautomat (KA, auch PDA für engl. pushdown automaton) ist ein Automat im Sinne der theoretischen Informatik. Es handelt sich also um ein rein theoretisches Konstrukt, das verwendet wird, um gewisse Eigenschaften von Problemen und Algorithmen zu analysieren und zu beweisen – ob es tatsächlich möglich oder sinnvoll wäre, eine solche Maschine zu bauen, ist dabei zunächst unerheblich.

Bei einem Kellerautomaten handelt es sich um einen endlichen Automaten, der um einen Kellerspeicher erweitert wurde. Ein Kellerautomat mit zwei Kellerspeichern ist gleichmächtig zur Turingmaschine.

Inhaltsverzeichnis

Funktionsweise

thumb|300px|Kellerautomat Die zugrundeliegende Idee ist die folgende: Die Eingabe wird zeichenweise von links nach rechts verarbeitet. Wenn es möglich ist, wird das Eingabezeichen sofort verarbeitet, wenn nicht, wird es in den Kellerspeicher gelegt und die Bearbeitung sobald wie möglich nachgeholt. Die möglichen Aktionen des Automaten hängen dabei, wie beim endlichen Automaten, vom momentan verarbeiteten Eingabezeichen, vom momentanen Zustand des Automaten und (das ist die Erweiterung gegenüber dem endlichen Automaten) zusätzlich vom Kellerinhalt ab, wobei immer nur das oberste Zeichen des Kellers relevant ist. In jedem Verarbeitungsschritt (das Lesen eines Zeichens und die damit zusammenhängenden Operationen) kann sich der Zustand des Automaten und der Kellerinhalt ändern.

Beispiel

Um das Prinzip eines Kellerautomaten zu verdeutlichen, wird häufig die syntaktische Untersuchung geklammerter Ausdrücke herangezogen. Beispielsweise muss in einem Ausdruck einer bestimmten Sprache zu jeder öffnenden Klammer auch eine schließende Klammer existieren:

Beispiel:  { ....  {  ...... } .... }
 

Der Automat beginnt in einem Startzustand z0; im Keller befindet sich ein Zeichen, welches das Ende kennzeichnet (#). Bei der Abarbeitung des Ausdrucks bewegt sich der Lesekopf Zeichen für Zeichen weiter. Stößt er dabei auf eine öffnende Klammer, so wird diese in den Keller geschrieben. Tritt in der weiteren Abarbeitung eine schließende Klammer auf, so wird das oberste Klammer-Auf-Zeichen im Keller wieder gelöscht. Der Ausdruck ist dann erfolgreich abgearbeitet, wenn der Lesekopf das Ende des Eingabebandes erreicht hat und sich im Keller ausschließlich das Zeichen # befindet. Befände sich hingegen noch eine geöffnete Klammer nach der Ausdrucksabarbeitung im Keller, so würde dies bedeuten, dass eine schließende Klammer fehlt und ein syntaktischer Fehler vorliegt.

Formale Definition

Ein nichtdeterministischer Kellerautomat wird definiert als ein 7-Tupel M = (Z,Σ,Γ,δ,z0,a,F)

wobei

ist.

Wenn die Übergangsrelation die Eigenschaft \left|\delta(z,a,k)\right| + \left|\delta(z,\epsilon,k)\right|\leq 1 erfüllt, spricht man von einem deterministischen Kellerautomaten. Zu einer festen Eingabe gibt es dann höchstens eine Zustandsübergangsabfolge, Mehrdeutigkeiten können also nicht auftreten.

Anmerkungen

Beispiel

Der folgende Kellerautomat M erkennt die Sprache L={anbn | n>0}.

M=(Z,Σ,Γ,δ,z0,#,F) 
* Z={z0, z1, z2} * Σ={a,b} * Γ={#,a} * F={z2}
δ: Zustand Eingabe Keller -> Zustand Keller z0 a # z0 a# z0 a a z0 aa z0 b a z1 ε z1 b a z1 ε z1 ε # z2 ε

Durch die ersten beiden Zeilen der Überführungsfunktion werden im Zustand z0 die führenden a-Zeichen der Eingabe gelesen und im Keller gespeichert. Die dritte Zeile bewirkt bei der Eingabe b einen Zustandswechsel vom Zustand z0 zum Zustand z1. Dabei wird ein a aus dem Keller entfernt. Durch die vierte Zeile werden alle weiteren b-Zeichen gelesen, sofern noch genügend a-Zeichen im Keller gespeichert sind. Wenn der Keller leer und die Eingabe gelesen ist, geht der Kellerautomat mit Hilfe der fünften Zeile in den Endzustand z2 über und akzeptiert damit die Eingabe.

Erhält der Kellerautomat beispielsweise die Eingabe aabb, so durchläuft er folgende Zustände, wobei ein Tripel (z,a,b) die Konfiguration eines Kellerautomaten im Zustand z, bei Eingabe a und aktuellem Kellerinhalt b beschreibt:

(z0,aabb,#) -> (z0,aabb,a#) -> (z0,aabb,aa#) -> (z1,aabb,a#) -> (z1,aabb,#) -> (z2,aabb,ε)

Kellerautomaten und formale Sprachen

Ein (Keller-)Automat liest eine aus einzelnen Zeichen bestehende Eingabe und akzeptiert (oder erkennt) diese – oder auch nicht. Die Menge der akzeptierten Eingaben bildet die durch den Automaten definierte Sprache.

Der nichtdeterministische Kellerautomat erkennt genau die kontextfreien Sprachen. Sie sind damit mächtiger als endliche Automaten, welche genau die regulären Sprachen erkennen, aber weniger mächtig als Turingmaschinen, welche genau die rekursiv aufzählbaren Sprachen erkennen. Ein deterministischer Kellerautomat erkennt die deterministisch-kontextfreien Sprachen.

Die Bedeutung des Kellerautomaten ergibt sich also daraus, daß sich Erkenntnisse über diesen (beispielsweise Äquivalenz mit anderen Automaten) auf die kontextfreien Sprachen übertragen lassen (und umgekehrt).

Siehe auch

See also: Kellerautomat, Algorithmus, Analyse, Automat (Informatik), Beweis (Mathematik), Chomsky-Hierarchie, Determinismus (Algorithmus), Endlicher Automat, Formale Sprache, Greibach-Normalform