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 [21.11.2024 06:43] – [Aufgaben] 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 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 270: | Zeile 270: | ||
=== (A5) Zusatzaufgabe === | === (A5) Zusatzaufgabe === | ||
- | Implementiere zunächst einen endlichen Automaten der die Klammersprache L< | + | Implementiere |
- | Die Eingabe soll als Paramter | + | * Die Eingabe soll als Parameter |
- | + | | |
- | Modelliere die Zustände des Automaten und gib bei der Bearbeitung der Eingabe die Zustandswechsel auf den Konsole aus. | + | |
- | + | - //Tipp 1: Importiere den Stack mit '' | |
- | Erweitere den Automaten um einen Stack, um unendlichen Klammertiefen zu erkennen. | + | - //Tipp 2: Um das oberste Element zu prüfen (ohne es zu entfernen), rufe '' |