Übungen
Die Aufgaben sind in vier Gruppen geordnet. Klicke auf eine Aufgabenüberschrift, um die Aufgabe zu öffnen! In FLACI gibst du Regeln und Wörter etwas anders ein als im Buch:
Schreibweise in FLACI
| Hier | In FLACI | |
|---|---|---|
| Pfeil in Regeln | → |
-> |
| leeres Wort | ε |
EPSILON |
| Nichtterminalsymbole |
S, B, … |
einzelne Großbuchstaben |
| Testwörter | v[d] |
v[d] (ohne Leerzeichen) |
Ableiten
Gegeben ist diese Grammatik:
S → t O r
O → o O | o
Du findest sie in FLACI: Grammatik „tor“ in FLACI öffnen.
- Bringe die Schritte der Ableitung von
tooorin die richtige Reihenfolge. - Wie oft wird die Regel
O → o Ofür ein Wort mit zehnobenutzt? Wie viele Ableitungsschritte sind insgesamt nötig? - Beschreibe die Sprache dieser Grammatik in eigenen Worten.
Fallstudie: Robo
In einem Spiel steuerst du die Figur Robo mit einem Textprogramm. Robo kennt drei Arten von Anweisungen:
-
v: ein Feld vor. -
d: Drehung um 90° nach rechts. -
[ ... ]: Alles zwischen den Klammern führt Robo zweimal hintereinander aus.
v[dv]d heißt also: vor, zweimal (drehen, vor), drehen. Nicht jeder Text ist ein gültiges Programm: In v[dv fehlt eine schließende Klammer.
Robo soll solche Fehler erkennen. Dafür brauchst du eine Grammatik für die gültigen Programme.
Zuerst gibt es nur die Befehle v und d. S steht für ein Programm, B für einen Befehl:
S → B S | ε
B → v | d
Du findest sie in FLACI: Grammatik 1 in FLACI öffnen.
- Leite
vdvab. Schreibe jede Satzform auf. Prüfe mit der Satzformliste in FLACI. - Welches ist das kürzeste Programm, das sich ableiten lässt? Gibt es ein längstes?
- Gib die Grammatik als Tupel
G = (N, T, P, S)an. -
Ein Experiment: Ändere in FLACI die erste Regel in
S -> BS | EPSILON(ohne Leerzeichen) und leitevdvnoch einmal ab. Was passiert? Erkläre es. Denke an das Alphabet Σchem aus dem Kapitel „Formale Sprachen“, in demHeein einzelnes Symbol ist. Formuliere eine Merkregel für das Eintippen. Über den Link lädst du die Grammatik neu.
Jetzt soll Robo auch Blöcke [ ... ] verstehen. Dazu bekommt B eine dritte Alternative. In der Klammer steht wieder ein ganzes Programm:
S → B S | ε
B → v | d | [ S ]
Auch diese Grammatik findest du in FLACI: Grammatik 2 in FLACI öffnen.
- Stelle
v[dv]dmit der Maschine her. Schreibe die Satzformen auf und vergleiche sie mit der Satzformliste in FLACI. - Entscheide zuerst ohne FLACI, welche Programme ableitbar sind:
[[v]],[v,[],v]d,[v][d]. Teste danach in FLACI. - In keinem ableitbaren Programm steht eine öffnende Klammer ohne die passende schließende. Erkläre, warum. Betrachte, durch welche Regel Klammern entstehen.
- Die Grammatik besteht aus nur fünf Regeln:
S → B S,S → ε,B → v,B → dundB → [ S ]. Trotzdem lassen sich unendlich viele Programme ableiten. Wie ist das möglich?Du kommst nicht weiter?
Leite
v[dv]dnoch einmal ab. Welche Nichtterminalsymbole tauchen in den Satzformen immer wieder auf? Durch welche Regeln kommen sie zurück?Das hast du entdeckt – zum Nachlesen
Eine Regel heißt rekursiv, wenn ihr Nichtterminalsymbol auf der rechten Seite wieder vorkommt (
S → B S) oder sich über andere Regeln wieder erzeugt (B → [ S ],S → B S). Mit ihnen lassen sich beliebig lange oder tief verschachtelte Wörter erzeugen. In den Satzformen sieht man es daran, dass ein ersetztes Nichtterminalsymbol im nächsten Schritt wieder auftaucht.
Stehen in einer Satzform mehrere Nichtterminalsymbole, darfst du frei wählen, welches du zuerst ersetzt. Probiere es mit Grammatik 2 aus:
- Stelle
v[dv]dher. Ersetze dabei immer das Nichtterminalsymbol, das am weitesten links steht. Schreibe die Satzformen auf. - Stelle
v[dv]dnoch einmal her. Ersetze jetzt immer das Nichtterminalsymbol ganz rechts. - Vergleiche beide Herstellungen: Was ist gleich, was anders?
- Öffne Grammatik 2 in FLACI. Leite
v[dv]dab und schalte zwischenL(links) undR(rechts) um. Vergleiche in beiden Einstellungen die Satzformliste. Was ändert sich, was bleibt gleich?
Das hast du entdeckt – zum Nachlesen
Bei einer Linksableitung wird in jedem Schritt das am weitesten links stehende Nichtterminalsymbol ersetzt, bei einer Rechtsableitung das am weitesten rechts stehende.
Die Reihenfolge der Satzformen unterscheidet sich, es entsteht aber dasselbe Wort mit denselben Regeln. Legt man sich auf Linksableitungen fest, ist die Reihenfolge der Schritte eindeutig.
Robo soll leere Blöcke nicht mehr akzeptieren: [] soll ungültig sein. Das leere Programm bleibt gültig.
- Ändere in Grammatik 2 nur die Regel für
B. - Prüfe die Programme
[],[v]undv[[d]].
Du findest keinen Lösungsansatz?
Ein Block muss jetzt mit mindestens einem Befehl beginnen. Wie erreichst du, dass in der Klammer mindestens ein B vorkommt?
Grammatiken entwerfen und beschreiben
Die Grammatiken haben die Terminalsymbole a und b, das Startsymbol ist S. Erkläre jeweils, welche Sprache L(G) die Grammatik G erzeugt. Gib das kürzeste Wort und drei möglichst unterschiedliche Beispielwörter an. Prüfe deine Vermutungen in FLACI. Aufgabe a) ist als Beispiel gelöst.
-
S → a S | b
Erklärung: beliebig vielea, am Ende genau einb.
kürzestes Wort:b
weitere Beispiele:abaaaabaaaaaaaaaab S → a S | b S | εS → a S a | b-
S → A AA → a A | b
Entwirf in FLACI eine Grammatik für alle Wörter aus einigen a, gefolgt von genau so vielen b. Mindestens ein a kommt vor. Teste alle Beispiele.
| ableitbar | nicht ableitbar |
|---|---|
ab, aabb, aaabbb, aaaaaaaaaabbbbbbbbbb
|
ba, aabbb, aaabb, abab, b
|
Du findest keinen Lösungsansatz?
Betrachte aaabbb. Was bleibt übrig, wenn du außen das erste a und das letzte b entfernst?
Rückblick: Diese Sprache als Syntaxdiagramm
Im Kapitel „Syntaxdiagramme“ hast du diese Sprache schon mit einem Diagramm beschrieben, das auf sich selbst verweist:
Übersetze es so in Regeln, wie du es im Einstieg gelernt hast.
Passe deine Grammatik an:
- Auch das leere Wort soll zur Sprache gehören.
- Auf jedes
asollen genau zweibfolgen (abb,aabbbb, …). Das leere Wort gehört nicht dazu.
- Entwirf eine Grammatik für alle korrekt geschachtelten Klammerausdrücke aus
(und). Das leere Wort gehört dazu.ableitbar nicht ableitbar (),(()),()(),(()()))(,((),()),(()))(Rückblick: Klammerausdrücke als Syntaxdiagramme
Im Kapitel „Syntaxdiagramme“ hast du Klammerausdrücke mit zwei Diagrammen beschrieben, die aufeinander verweisen. Dort gehörte das leere Wort nicht dazu:
Übersetze die Diagramme in Regeln und passe sie dann für das leere Wort an.
- Ein Palindrom ist ein Wort, das vorwärts und rückwärts gleich gelesen wird. Entwirf eine Grammatik für alle Palindrome aus
aundb. Das leere Wort ist auch ein Palindrom.ableitbar nicht ableitbar a,b,aba,abba,baabab,aab,abab,bbaRückblick: Palindrome als Syntaxdiagramm
Im Kapitel „Syntaxdiagramme“ hast du nichtleere Palindrome so beschrieben:
- Vergleiche deine Grammatik aus a) mit der einer Mitschülerin oder eines Mitschülers. Sind die Regeln gleich? Erzeugen beide dieselbe Sprache? Teste beide mit den Beispielen.
Anspruchsvoller: Mehrdeutigkeit und Grenzen
Diese Grammatik beschreibt einfache Rechenausdrücke. z steht für eine Zahl:
E → E + E | E * E | ( E ) | z
Du findest sie in FLACI: Grammatik „Rechenausdrücke“ in FLACI öffnen.
- Leite
z+z*zin FLACI als Linksableitung ab (EinstellungL). Finde von Hand eine zweite, andere Linksableitung für dasselbe Wort. Tipp: Beginne mit der RegelE → E * E. -
Klammerprobe: Schreibe eine Ableitung noch einmal auf. Immer wenn du eine Regel mit
+oder*anwendest, setzt du eckige Klammern um das, was dabei entsteht. Eckig, damit sie nicht mit den runden Klammern der Grammatik verwechselt werden. So siehst du, was zusammengehört. Für die Ableitung, die mitE → E + Ebeginnt, sieht das so aus:
Führe die Klammerprobe für deine zweite Ableitung durch. Setze dann für die dreiE ⇒ [E + E] ⇒ [z + E] ⇒ [z + [E * E]] ⇒ [z + [z * E]] ⇒ [z + [z * z]]zdie Zahlen 2, 3 und 4 ein und rechne beide geklammerten Ausdrücke aus. - Im Kapitel „Syntaxdiagramme“ hast du Rechenausdrücke mit diesen Diagrammen beschrieben (ohne Vorzeichen gezeigt):
Zeigen die Diagramme, ob in z+z*zzuerst addiert oder zuerst multipliziert wird? Vergleiche mit deinen Klammerproben aus b). - Auch natürliche Sprache kann mehrdeutig sein: „Ich sehe den Mann mit dem Fernglas.“ Gib zwei Lesarten an. Warum ist so etwas bei Programmiersprachen ein Problem?
Das hast du entdeckt – zum Nachlesen
Eine Grammatik heißt mehrdeutig, wenn es für mindestens ein Wort zwei verschiedene Linksableitungen gibt. Gibt es kein solches Wort, heißt die Grammatik eindeutig.
Die Ableitung legt fest, wie ein Wort aufgebaut ist und damit auch, wie es verstanden wird. Die Klammerprobe macht diesen Aufbau sichtbar. Bei einer mehrdeutigen Grammatik ist er nicht eindeutig geklärt.
Entwirf in FLACI eine Grammatik für dieselben Rechenausdrücke wie in Aufgabe 9, die aber eindeutig ist und „Punkt vor Strich“ beachtet: Für z+z*z soll es nur eine Linksableitung geben, und ihre Klammerprobe soll [z + [z * z]] ergeben.
Du findest keinen Lösungsansatz?
Ein Ausdruck E besteht aus einem oder mehreren Teilen M, die mit + verbunden sind. Jeder Teil M besteht aus einem oder mehreren Faktoren F, die mit * verbunden sind (M wie „mal“). Ein Faktor ist eine Zahl oder ein Ausdruck in Klammern. Beschreibe das mit Regeln für E, M und F.
- Teste deine Grammatik mit
z+z*z,z*z+z,(z+z)*zundz+*z. Welche Wörter sind ableitbar? - Schreibe die Linksableitung von
z+z*zmit Klammerprobe auf. Gibt es jetzt noch eine andere Linksableitung? - Beide Grammatiken erzeugen dieselben Wörter. Was unterscheidet sie, und warum ist das für die Bedeutung eines Rechenausdrucks wichtig?
Entwirf in FLACI eine Grammatik für alle Wörter aus einigen a, genauso vielen b und genauso vielen c, in dieser Reihenfolge. Mindestens ein a kommt vor.
| ableitbar | nicht ableitbar |
|---|---|
abc, aabbcc, aaabbbccc
|
aabbc, abcabc, cba, aabbbcc
|
- Im Kapitel „Syntaxdiagramme“ hast du erfahren, dass sich diese Sprache nicht mit Syntaxdiagrammen beschreiben lässt. Gelingt es mit einer Grammatik? Versuche, eine zu finden. Bei Aufgabe 7 hat der Trick mit
a S bfunktioniert. Woran scheitert dein Versuch bei drei Buchstaben? - Formuliere eine Vermutung, woran das liegen könnte. Vergleiche mit der Begründung aus dem Kapitel „Syntaxdiagramme“.
Auflösung (erst nach deinen Versuchen öffnen)
Für diese Sprache gibt es keine Grammatik mit der Regelform, die FLACI zulässt (links steht genau ein Nichtterminalsymbol). Warum das so ist, klärst du im Kapitel „Formale Sprachen klassifizieren“.