Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:automaten:kellerautomaten:start [18.11.2024 18:33] – [Ablaufprotokoll eines Kellerautomaten] Frank Schiebel | faecher:informatik:oberstufe:automaten:kellerautomaten:start [11.02.2025 11:21] (aktuell) – [Aufgaben] Marco Kuemmel | ||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
=== (A1) Vorüberlegungen === | === (A1) Vorüberlegungen === | ||
- | **(A)** Konstruiere einen endlichen Automaten, der die Sprache L< | + | **(A)** Konstruiere einen endlichen Automaten, der die Sprache L< |
Zur Sprache gehören z.B. | Zur Sprache gehören z.B. | ||
(()), ()(), (), (()()) | (()), ()(), (), (()()) | ||
Zeile 11: | Zeile 11: | ||
((()), ((())), ()), )(, )()( | ((()), ((())), ()), )(, )()( | ||
- | **(B)** Gibt es einen endlichen Automaten A, der die Sprache | + | **(B)** Gibt es einen endlichen Automaten A, der die Sprache |
**(C)** Gib einen endlichen Automaten A an, der die allgemeine Klammersprache, | **(C)** Gib einen endlichen Automaten A an, der die allgemeine Klammersprache, | ||
Zeile 33: | Zeile 33: | ||
<callout type=" | <callout type=" | ||
++++ Erkenntnis zu (C) | | ++++ Erkenntnis zu (C) | | ||
- | Versuche, einen solchen endlichen Automaten A zu konstruieren, | + | Versuche, einen solchen endlichen Automaten A zu konstruieren, |
- | Die **Endlichkeit** eines endlichen Deterministische Automaten besteht in der **Endlichkeit der Zustände** – um " | + | Die **Endlichkeit** eines endlichen Deterministische Automaten besteht in der **Endlichkeit der Zustände** – um " |
- | Wichtig ist der **Unterschied zur Eingabelänge** der gültigen Wörtern eine Sprache, die durch einen endlöichen | + | Wichtig ist der **Unterschied zur Eingabelänge** der gültigen Wörtern eine Sprache, die durch einen endlichen |
++++ | ++++ | ||
</ | </ | ||
Zeile 44: | Zeile 44: | ||
Wir erweitern den endlichen Automaten um einen **Speicher**, | Wir erweitern den endlichen Automaten um einen **Speicher**, | ||
- | aufnehmen kann. Für kontextfreie Sprachen reicht als Speicher ein **Stack** -- dieser wird auch als " | + | aufnehmen kann. Für **kontextfreie Sprachen**((Kontextfreie Sprachen sind diejenigen, die von einem Kellerautomaten erkannt werden können.)) |
Für unsere Klammersprache könnte ein erster Entwurf eines Kellerautomaten so aussehen - der Kellerspeicher ist hier mit 6 " | Für unsere Klammersprache könnte ein erster Entwurf eines Kellerautomaten so aussehen - der Kellerspeicher ist hier mit 6 " | ||
Zeile 50: | Zeile 50: | ||
{{ : | {{ : | ||
- | Zu Beginn ist der Kellerspeicher leer - das wird durch das Symbol **#** gekennzeichnet - der Ablauf | + | Zu Beginn ist der Kellerspeicher leer - das wird durch das Symbol **#** gekennzeichnet - der Ablauf |
Um Komplikationen beim Aufschreiben der Klammern zu vermeiden, verwenden wir von nun an für eine öffnende Klammer das Symbol **a**, für eine schließende Klammer ein **z**. Wir wollen nun nachvollziehen, | Um Komplikationen beim Aufschreiben der Klammern zu vermeiden, verwenden wir von nun an für eine öffnende Klammer das Symbol **a**, für eine schließende Klammer ein **z**. Wir wollen nun nachvollziehen, | ||
Zeile 175: | Zeile 175: | ||
Eingabe endet, q0 ist Endzustand: Wort wird akzeptiert! | Eingabe endet, q0 ist Endzustand: Wort wird akzeptiert! | ||
+ | |||
+ | ===== Aufgaben ===== | ||
+ | |||
+ | |||
---- | ---- | ||
{{: | {{: | ||
- | === (A2) Vorüberlegungen | + | === (A2) === |
{{ : | {{ : | ||
* Simuliere den Klammerautomaten in FLACI. | * Simuliere den Klammerautomaten in FLACI. | ||
- | * Teste den Automaten mit verschiedenen Eingaben und volziehe | + | * Teste den Automaten mit verschiedenen Eingaben und vollziehe |
**Hinweise** | **Hinweise** | ||
Zeile 197: | Zeile 201: | ||
---- | ---- | ||
{{: | {{: | ||
- | === (A3) Vorüberlegungen | + | === (A3) === |
Gegeben sind folgende Kellerautomaten. Beschreibe für jeden der Automaten die Wörter, die dieser erkennt und erstelle jeweils Ablaufprotokolle für zwei aussagekräftige Beispieleingaben – ein Wort, das akzeptiert wird und eines, das verworfen wird. | Gegeben sind folgende Kellerautomaten. Beschreibe für jeden der Automaten die Wörter, die dieser erkennt und erstelle jeweils Ablaufprotokolle für zwei aussagekräftige Beispieleingaben – ein Wort, das akzeptiert wird und eines, das verworfen wird. | ||
Zeile 207: | Zeile 211: | ||
{{ : | {{ : | ||
+ | |||
+ | **(C)** | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ++++ Lösung (A) | | ||
+ | L = { a< | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung (B) | | ||
+ | L = { a< | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Am Ende der Eingabe wird also immer versucht, mittels λ-Übergang abzuschließen. Dabei landet man entweder im akzeptierenden Zustand q< | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung (C) | | ||
+ | L = { a< | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | ++++ | ||
+ | ---- | ||
+ | {{: | ||
+ | === (A4) === | ||
+ | |||
+ | Entscheide mit Hilfe eines Kellerautomaten, | ||
+ | |||
+ | * **(A)** L = { a< | ||
+ | * **(B)** L = { a< | ||
+ | * **(C)** L = { w ∈ {a, b}* | #a = #b } die alle Wörter enthält, die aus gleich vielen a und b bestehen, die – im Gegensatz zur Sprache aus Aufgabenteil a) - in beliebiger Reihenfolge auftreten dürfen. (Hinweis: #a bezeichnet die Anzahl der a´s in dem betreffenden Wort.) | ||
+ | * **(D)** L = { a< | ||
+ | |||
+ | |||
+ | ++++ Lösung 4(A) | | ||
+ | Die Sprache ist kontextfrei (aber nicht regulär) – für jedes " | ||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung 4(B) | | ||
+ | Die Sprache ist nicht kontextfrei – dies ist leicht einzusehen, wenn man versucht, festzulegen, | ||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung 4(C) | | ||
+ | Diese Sprache ist kontextfrei. Man kann mit zwei Zeichen im Stackalphabet arbeiten: ist ein " | ||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung 4(D) | | ||
+ | Diese Sprache ist kontextfrei: | ||
+ | ++++ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A5) Zusatzaufgabe === | ||
+ | |||
+ | Implementiere in Java zunächst einen endlichen Automaten der die Klammersprache L< | ||
+ | |||
+ | * Die Eingabe soll als Parameter beim Erstellen des Automaten erfragt werden. | ||
+ | * Modelliere die Zustände des Automaten und gib bei der Bearbeitung der Eingabe die Zustandswechsel auf den Konsole aus, so dass der Ablauf bei der Verarbeitung der Eingabe erkennbar ist. | ||
+ | * Erweitere den Automaten um einen Stack, um unendlichen Klammertiefen zu erkennen. Erstelle bei der Verarbeitung der Eingabe ein Ablaufdiagramm wie oben, das du auf der Konsole ausgibst. | ||
+ | - //Tipp 1: Importiere den Stack mit '' | ||
+ | - //Tipp 2: Um das oberste Element zu prüfen (ohne es zu entfernen), rufe '' | ||
+ | |||
+ | |||
+ | ===== Material ===== | ||
+ | |||
+ | |||
+ | * [[https:// | ||
+ | |||
+ | |||
+ |