CB 69 Compilerbau (Sommersemester 1998)
Prof. Debora Weber-Wulff
6. Übungsaufgabe (60 Punkte)
Datum: 8. bzw. 11. Juni 1998
Abgabetermin:
22. bzw. 25. Juni 1996 am Anfang der Übungsstunde
Lernziele: Eine kontextfreie Grammatik aufstellen
- (60 Punkte)
Erstellen Sie eine kontextfreie Grammatik für Adalein!
Wie schreibt man nun eine Grammatik? Hauptsächlich dadurch, daß
man viele andere Grammatiken liest, um Ideen für den eigenen
Konstrukte zu sammeln. Dann werden die Eigenschaften geprüft, und
fall der Grammatik noch nicht den gewünschten Form hat, kann man
durch Verfahren wie in der Vorlesung vorgestellt - Herausnahme von
Linksrekursion und Faktorisierung - etwas "Grammatik-Massage" betreiben.
Hier ein paar Hinweise aus dem Drachenbuch, Aho/Sethi/Ullman:
Reguläre Ausdrücke vs. Kontextfreie Grammatiken
Jeder Konstrukt, der durch eine regulären Ausdruck beschrieben
werden kann, kann auch durch einen kfr-Grammitik beschrieben werden. Z.B.
beschreiben der RA (a|b)*abb und der Grammatik
A -> aA | bA | aB
B -> bC
C -> bD
D -> \epsilon
die gleiche Sprache, die Menge von Zeichenreihen mit beliebig viele
a und b, die mit abb endet.
Es gibt ein Verfahren (dort beschrieben), um aus einer NFSA eine
kfr Grammatik zu erhalten. Warum braucht man überhaupt RA, wenn
man sie genausogut mit kfr Grammatiken beschreiben kann?
- Die lexikalische Regeln einer Sprache sind oft sehr einfach,
wir brauchen nicht so eine mächtige Beschreibung.
- RA sind meistens knapper und einfacher zu verstehen für
Tokenklassen als kfr Grammatiken.
- Effizienter lexikalische Analysatoren können automatisch
aus RA konstruiert werden, nicht jedoch für beliebige
kfr Grammatiken.
- Das Aufteilen der syntaktische Struktur einer Sprache in
lexikalische und syntaktische Analyse bietet eine gute
Modulisierungsmöglichkit an.
RA sind am besten für Identifikatoren, Konstanten, Schlüsselwörter u
sw. kfr Grammatiken sind sinnvoller für balanzierte Klammer,
begin-end Schachtelungen, if-then-else Konstrukte use, da Verschachtelungen
nicht durch RA dargestellt werden können.
Welche Sprache wird durch die Grammatik erzeugt?
Man macht es selten für große Compiler, aber man sollte wissen,
wie man die Sprache einer Grammatik bestimmt. Es muß einen Beweis
geführt werden mit zwei Teile. Erst mal muss man zeigen, daß
jeder Zeichenreihe, die aus der Grammatik generierbar ist, in der Sprache
liegt. Dann muß man zeigen, daß alle Zeichenreihen in der
Sprache auch generierbar sind.
Debora Weber-Wulff <
/a> <weberwu@tfh-berlin.de>
Letzte Änderung: Mon Jun 8 09:20:26 1998