Informatik · Klasse 12–13 · aktualisiert
Kellerautomat einfach erklärt: Aufbau und Beispiel
Du lernst, wie ein Kellerautomat mit seinem Keller Klammern prüft, und welche Sprachen deterministische und nichtdeterministische Automaten erkennen.
0 von 11 Aufgaben gelöst
Kurz gesagt
Ein Kellerautomat ist ein endlicher Automat mit einem Keller, der nach dem LIFO-Prinzip arbeitet. Typischerweise bestimmen Zustand, Eingabezeichen und oberstes Kellerzeichen den neuen Zustand und das neue Kellerwort. Nichtdeterministische Kellerautomaten erkennen die kontextfreien Sprachen.
Stell dir vor, du sollst prüfen, ob in einem Ausdruck zu jeder öffnenden Klammer eine schließende gehört. Ein Kellerautomat löst das mit einem Keller, in dem er sich offene Klammern merkt. Das Prinzip zeigt, wie man Verschachtelungen prüfen kann. Hier lernst du es Schritt für Schritt.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Ein Keller (auch Stapelspeicher, Stapel oder Stack genannt) ist eine Datenstruktur. Stell dir einen Stapel Umzugskisten vor. Du kannst nur oben eine Kiste daraufstellen oder von oben eine herunternehmen. Der Zugriff ist im Regelfall nur auf das oberste Element möglich. Weiter unten im Stapel kannst du nichts hinzufügen oder entfernen.
Deshalb kommen die Elemente in umgekehrter Reihenfolge wieder heraus. Das zuerst abgelegte (unterste) Element wird als letztes abgerufen. Das zuletzt abgelegte (oberste) Element wird zuerst abgerufen. Dieses Prinzip heißt Last In – First Out, kurz LIFO.
Das Ablegen eines neuen Objekts nennt man „Push“. Bei „Pop“ wird das oberste Objekt gelesen und gleichzeitig gelöscht. Soll das oberste Objekt nur gelesen werden, benutzt man „Top“ oder „Peek“.
Definition
LIFO-Prinzip
LIFO heißt „Last In – First Out“. Elemente werden in der umgekehrten Reihenfolge abgerufen, in der sie abgelegt wurden. Das zuletzt abgelegte Element kommt zuerst wieder heraus.
Beispiel: Stapel mit A und B (ausgedachte Namen)
- 1in: A wird abgelegt, im Keller liegt nur A
- 2in: B kommt oben darauf, oben liegt B, unten A
- 3out: B wird zuerst wieder abgerufen
- 4out: danach wird A abgerufen
Merke: Beim Keller zählt nur das oberste Element: Dort wird abgelegt und von dort wird abgerufen.
Teste dich
Ein Kellerautomat ist ein endlicher Automat, der um einen Kellerspeicher erweitert wurde. Er soll klären, ob eine Eingabe zu einer bestimmten formalen Sprache gehört. Die Eingabe ist ein Wort aus null, einem oder mehreren Zeichen. Die Sprache ist eine Menge von Wörtern. Der Automat arbeitet das Eingabewort Schritt für Schritt von links nach rechts ab. Zu Anfang ist er im Startzustand.
Typischerweise wird in jedem Verarbeitungsschritt ein Zeichen aus der Eingabe gelesen. Außerdem wird das oberste Kellerzeichen gelesen, das dabei entfernt wird. Abhängig vom aktuellen Zustand, dem gelesenen Eingabezeichen und dem gelesenen Kellerzeichen geht der Automat in einen neuen Zustand über. Anstelle des entfernten Kellerzeichens legt er ein neues Wort auf dem Keller ab.
Es gibt Abweichungen. Nicht in jedem Schritt muss ein Eingabezeichen gelesen werden. Dann wird das gelesene Wort ε genannt, das leere Wort. Außerdem kann man die erkannte Sprache auch über einen Endzustand definieren, den der Automat erreicht. Bei der einfachen Erklärung gilt: Ist die gesamte Eingabe gelesen und der Keller leer, gehört die Eingabe zur erkannten Sprache. Beim Klammerbeispiel im nächsten Abschnitt zählt stattdessen: Im Keller liegt nur das Endzeichen #.
Definition
Kellerautomat
Ein Kellerautomat (KA, englisch PDA) ist ein endlicher Automat mit einem zusätzlichen Kellerspeicher. Er prüft, ob ein Eingabewort zu einer formalen Sprache gehört.
| Das bestimmt den Schritt | Das ist das Ergebnis |
|---|---|
| Aktueller Zustand, gelesenes Eingabezeichen, oberstes Kellerzeichen | Neuer Zustand und neues Kellerwort anstelle des entfernten Zeichens |
Beispiel: Ein einzelner Schritt (ausgedachtes Beispiel)
- 1Zustand: z0, Eingabezeichen: {, oberstes Kellerzeichen: #
- 2Das oberste Kellerzeichen # wird entfernt.
- 3Neuer Zustand: z0. Neues Wort anstelle des #: { und # (die { liegt oben).
- 4Ergebnis: Im Keller liegt # und darüber die {.
Teste dich
Eine typische Aufgabe: In einem Ausdruck muss zu jeder öffnenden Klammer eine schließende Klammer existieren, zum Beispiel { … { … } … }. Genau das prüft der Kellerautomat mit seinem Keller.
Der Automat beginnt im Startzustand z0. Im Keller liegt ein Zeichen, das das Ende kennzeichnet: #. Der Lesekopf zeigt auf das Zeichen der Eingabe, das gerade gelesen wird, und bewegt sich Zeichen für Zeichen weiter. Trifft er auf eine öffnende Klammer, wird sie in den Keller geschrieben. Trifft er auf eine schließende Klammer, wird das oberste Klammer-auf-Zeichen im Keller gelöscht.
Der Ausdruck ist erfolgreich abgearbeitet, wenn der Lesekopf das Ende der Eingabe erreicht hat und im Keller nur # liegt. Liegt am Ende noch eine geöffnete Klammer im Keller, fehlt eine schließende Klammer. Das ist ein syntaktischer Fehler. Ein Fehler liegt auch vor, wenn das Ende des Kellers erreicht wird, bevor die Eingabe zu Ende ist. Dann stehen zu viele schließende Klammern in der Eingabe.
Beispiel: Die Klammerfolge { { } } (ausgedachtes Beispiel)
- 1Der Keller wird mit dem obersten Zeichen rechts geschrieben. Start: #
- 2Zeichen { → Push, Keller: # {
- 3Zeichen { → Push, Keller: # { {
- 4Zeichen } → oberstes { löschen, Keller: # {
- 5Zeichen } → oberstes { löschen, Keller: #
- 6Eingabe zu Ende, im Keller nur #: Zu jeder öffnenden Klammer gehört eine schließende.
Merke: Erfolg heißt: Eingabe zu Ende und im Keller nur #. Bleibt eine öffnende Klammer übrig, fehlt eine schließende.
Teste dich
Bei manchen Kombinationen aus Zustand, Eingabezeichen (oder ε) und Kellerzeichen kann ein Kellerautomat die Wahl zwischen mehreren Übergängen haben. Ein Übergang ist die Kombination aus Folgezustand und Kellerwort. Solche Automaten heißen nichtdeterministisch. Eine Eingabe gilt dort als erkannt, wenn der Keller geleert werden kann oder ein Endzustand erreicht werden kann.
Bei einem deterministischen Kellerautomaten ist die Wahl eingeschränkt. Für jede Kombination aus Zustand, Eingabezeichen (oder ε) und Kellerzeichen gibt es zusammen höchstens einen möglichen Übergang. Zu einer festen Eingabe gibt es dann höchstens eine Abfolge von Zustandsübergängen. Mehrdeutigkeiten können nicht auftreten.
Die Sprachklassen: Die von nichtdeterministischen Kellerautomaten akzeptierten Sprachen sind genau die kontextfreien Sprachen. Das sind Sprachen, die eine kontextfreie Grammatik beschreiben kann (Typ 2 der Chomsky-Hierarchie). Die von deterministischen Kellerautomaten akzeptierten Sprachen heißen deterministisch kontextfreie Sprachen. Sie sind eine echte Teilklasse der kontextfreien Sprachen. Jede reguläre Sprache ist auch kontextfrei. Die Sprache aus den Wörtern a^n b^n c^n ist kontextsensitiv, aber nicht kontextfrei.
Für deterministisch kontextfreie Sprachen gibt es LR-Parser. Das sind Verfahren, die beim Lesen von links nach rechts in linearer Zeit entscheiden, ob die Eingabe ein Wort der Sprache ist. Viele in der Praxis verwendete formale Sprachen, insbesondere Programmiersprachen, gehören zu dieser Klasse.
Definition
Deterministisch kontextfreie Sprache
Eine Sprache, die von einem deterministischen Kellerautomaten akzeptiert wird. Sie ist eine echte Teilklasse der kontextfreien Sprachen.
| Sprachklasse | Einordnung |
|---|---|
| Reguläre Sprachen (Typ 3) | In den kontextfreien Sprachen enthalten |
| Deterministisch kontextfreie Sprachen | Von deterministischen Kellerautomaten akzeptiert |
| Kontextfreie Sprachen (Typ 2) | Von nichtdeterministischen Kellerautomaten akzeptiert |
| Kontextsensitive Sprachen (Typ 1) | Umfassen die kontextfreien Sprachen |
Merke: Nichtdeterministische Kellerautomaten erkennen die kontextfreien Sprachen. Deterministische erkennen nur eine echte Teilklasse davon.
Teste dich
Alles auf einen Blick
Kellerautomat
LIFO
Das zuletzt abgelegte Element wird zuerst abgerufen.
Ein Schritt
Zustand, Eingabezeichen und oberstes Kellerzeichen bestimmen typischerweise den neuen Zustand und das neue Kellerwort.
Klammern
Eine öffnende Klammer kommt in den Keller, eine schließende löscht die oberste öffnende.
Erfolg
Die Eingabe ist zu Ende und im Keller liegt nur #.
Sprachklassen
Nichtdeterministische Kellerautomaten erkennen die kontextfreien Sprachen, deterministische eine echte Teilklasse davon.
Musteraufgabe · Schritt für Schritt
Die Klammerfolge { { } { } } prüfen (ausgedachtes Beispiel)
- 1Regeln: öffnende Klammer → Push, schließende Klammer → oberstes { löschen. Oberstes Zeichen steht rechts. Start in z0, Keller: #
- 2Zeichen { → Push, Keller: # { · Zeichen { → Push, Keller: # { {
- 3Zeichen } → oberstes { löschen, Keller: # { · Zeichen { → Push, Keller: # { {
- 4Zeichen } → oberstes { löschen, Keller: # { · Zeichen } → oberstes { löschen, Keller: #
- 5Eingabe zu Ende, im Keller nur #: Zu jeder öffnenden Klammer gehört eine schließende.
Fehler finden
Prüfe die Schritte bei der Eingabe { { (ausgedachtes Beispiel) In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Das Ende der Eingabe reicht nicht für den Erfolg. Richtig: Im Keller liegen noch zwei öffnende Klammern über dem #. Es fehlen zwei schließende Klammern, das ist ein Fehler.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Beim Keller wird das zuerst abgelegte Element als abgerufen. Am Ende einer erfolgreichen Klammerprüfung liegt im Keller . Die von nichtdeterministischen Kellerautomaten akzeptierten Sprachen sind genau die Sprachen.
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback