Formale Sprachen, Automaten, Compiler Berufsakademie Lörrach, TIT06 - 3. Semester Übung 1 -> LÖSUNGSVORSCHLAG Σ = { 0, 1, ..., 9 }, ist sicher ein Alphabet, aber auch ΣH = { 0, 1, ..., 9, A, B, ..., F } für die hexadezimale Darstellung, ΣD = { 0, 1 } für die Dualzahlen oder ΣS = { | } für Strichzahlen sind Möglichkeiten. Auch ein Alphabet wie Σ = { I, V, X, L, C, D, M } für die römischen Zahlen wäre denkbar. ÜA1.1. Die "normalen" Dezimalziffern, also b) Über dem Terminal-Alphabet T = { 0, 1, ..., 9 } wäre P = { S → 0S | 1S | 2S | … | 9S | ε } eine Grammatik, die die "Wörter" für die natürlichen Zahlen erzeugt. Über dem Terminal-Alphabet TD = { 0, 1 } wäre P = { S → 0S | 1S | ε } eine mögliche Grammatik zum Erzeugen Dualzahlen. Für das Terminal-Alphabet TD = { I } schließlich wählt man z.B. P = { S → |S | ε } eine mögliche Grammatik zum Erzeugen Dualzahlen. c) Die Grammatiken sind alle rechtslinear/ regulär und damit vom Typ 3. BA Lörrach: Formale Sprachen, Automaten, Compiler, TIT06 – 3. Sem, Dipl.-Inf. Robert Grübel Seite 1 ÜA1.2. a) L(G) = { ε, ac, ab, cab } mit T = { a, b, c } b) L(G) = { 0nb | n ≥ 0 } mit T = { 0, b } c) L(G) = Ø d) L(G) = { lnmnn | n ≥ 0 } mit T = { l, m, n } e) L(G) = { 020, 021, 120, 121} mit T = { 0, 1, 2 } (es können keine Terminal-Wörter erzeugt werden!) Ü1.3. Typ-3 / regulär: a), b), c) linear: a), b), c), d) Typ- 2 / kontextfrei: a), b), c), d) Typ-0: e) ACHTUNG: Die Sprache aus e) ist regulär, hier erzeugt eine Typ-0Grammatik eine reguläre Sprache - und das bedeutet, es muß auch eine reguläre Grammatik geben, die dieselbe Sprache erzeugt. BA Lörrach: Formale Sprachen, Automaten, Compiler, TIT06 – 3. Sem, Dipl.-Inf. Robert Grübel Seite 2 ÜA1.4. a) N = { S }, P = { S → abc | cba } b) N = { S, A }, P = { S → AAA, A → a | b | c } c) N = { S, A }, P = { S → AaA, A → bA | cA | ε } d) N = { S, A }, P = { S → AaA, A → aA | bA | cA | ε } e) N = { S, A }, P = { S → AaA | A, A → bA | cA | ε } f) N = { S }, P = { S → aSc | aabb } g) N = { S,A,B }, P = { S → AB, A → aAb | ε, B → cB | ε } h) N = { S }, P = { S → aSa | bSb| cSc| ε } i) N = { S }, P = { S → aA | bS | cS, A → aS | bA | cA | ε } j) N = { S, S1, S2, A }, P = { S → S1 | S2, S1 → AaA, A → aA | bA | cA | ε, S2→ aS2a | bS2b | cS2c | ε } k) N = { S }, P = { S → aAa | bSb | cSc, A → aAa | bAb | cAc | ε } l) N = { S }, P = { S → S1S2, S1 → AaA, A → aA | bA | cA | ε, S2 → aS2a | bS2b | cS2c | ε } Ü1.5. regulär: a), i), kontextfrei: b), c), d),e), f), g), h), j), k), l) linear: a), f), h), i), k) ACHTUNG: Die Sprachen aus b) bis e) sind regulär, hier erzeugen Typ-2Grammatiken reguläre Sprachen, - das bedeutet, es gibt zur jeweiligen Sprache eine reguläre Grammatik, die sie erzeugt. BA Lörrach: Formale Sprachen, Automaten, Compiler, TIT06 – 3. Sem, Dipl.-Inf. Robert Grübel Seite 3 Ü1.6. a) N = { INTZAHL, VZ, BZAHL, CZAHL }, mit P= { NTZAHL → VZ BZAHL, BZAHL → 1CZAHL | ... | 9CZAHL, CZAHL → 0CZAHL | 1CZAHL | ... | 9CZAHL | ε VZ → + | - } Die Grammatik ist zu denen aus Ü1.1 natürlich sehr ähnlich, sie erzeugt ja sozusagen die ganzen Zahlen, und das sind die natürlichen Zahlen mit Plus oder Minus davor. "BZHAL" und "CZAHL" braucht man wg. der Bedingung "ohne führende Nullen". b) Die Grammatik ist regulär, also vom Typ 3. Ü1.7. Die Beispiel-Grammatik aus der Vorlesung war N = { SATZ, SUBJEKT, PRÄDIKAT }, S = SATZ, T = { Georg, Hans, Fritz, geht, läuft, rennt } und P={ SATZ SUBJEKT PRÄDIKAT → → → SUBJEKT PRÄDIKAT Georg | Hans | Fritz geht | läuft | rennt } Um die Grammatik um die syntaktische Variable "Objekt" zu erweitern muß man sie natürlich zur Menge dazu nehmen: N = { SATZ, SUBJEKT, PRÄDIKAT, OBJEKT }, BA Lörrach: Formale Sprachen, Automaten, Compiler, TIT06 – 3. Sem, Dipl.-Inf. Robert Grübel Seite 4 Dann muß man zur Menge T mögliche, als Objekt in Frage kommende Terminale-Symbole hinzufügen. Das könnten "nach Hause" und "zum Zug" sein, also wird aus dem "alten" T jetzt T = { Georg, Hans, Fritz, geht, läuft, rennt, nach Hause, zum Zug }. Jetzt kann man die Produktions-Regel für SATZ ändern in SATZ → SUBJEKT PRÄDIKAT OBJEKT und die neue Produktions-Regel OBJEKT → nach Hause | zum Zug einführen. b) Die von der "neuen" Grammatik erzeugte Sprache sind die neun "Sätze der "alten" Sprache, jeweils erweitert um die Wendungen "nach Hause" und "zum Zug". Also L(G) = { Georg geht nach Hause, Georg läuft nach Hause, Georg rennt nach Hause, Georg geht zum Zug, Georg läuft zum Zug, Georg rennt zum Zug, Hans geht nach Hause, Hans läuft nach Hause, Hans rennt nach Hause, Hans geht zum Zug, Hans läuft zum Zug, Hans rennt zum Zug, Fritz geht nach Hause, Fritz läuft nach Hause, Fritz rennt, nach Hause, Fritz geht zum Zug, Fritz läuft zum Zug, Fritz rennt zum Zug } c) Die Grammatik ist kontextfrei, daher vom Typ 2. ANMERKUNG: Die Sprache dagegen ist regulär/ Typ-3. Hier erzeugt eine kontextfreie Grammatik eine reguläre Sprache, und wieder muß es also auch eine reguläre Grammatik geben, die dieselbe Sprache erzeugt. BA Lörrach: Formale Sprachen, Automaten, Compiler, TIT06 – 3. Sem, Dipl.-Inf. Robert Grübel Seite 5