Vorlesungsskript - Institut für Programmierung und Reaktive Systeme
Vorlesungsskript - Institut für Programmierung und Reaktive Systeme
Vorlesungsskript - Institut für Programmierung und Reaktive Systeme
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
E<br />
E A E<br />
id<br />
+<br />
E A E<br />
id<br />
3.1 Kontextfreie Grammatiken<br />
E<br />
E A E<br />
E A E<br />
* id id + id<br />
Abbildung 3.4: Verschiedene Strukturbäume zu einem Satz.<br />
einer Grammatik zu einem Satz mehrere Strukturbäume, ist die Grammatik mehrdeutig.<br />
Beispiel 17<br />
In Abbildung 3.4 sind zwei mögliche Strukturbäume <strong>für</strong> den Satz id + id ∗ id gegeben.<br />
Ihre unterschiedliche Struktur ist in der Wahlmöglichkeit zwischen verschiedenen<br />
Produktionen begründet. Es entstehen verschiedene Strukturbäume, die trotzdem dieselbe<br />
Satzform als Ergebnis besitzen.<br />
Definition 17<br />
Ein Satz u ∈ L(G) heißt mehrdeutig, wenn er mehr als einen Strukturbaum hat.<br />
Eine kontextfreie Grammatik G heißt mehrdeutig, wenn L(G) mindestens einen<br />
mehrdeutigen Satz enthält. Eine nicht mehrdeutige Grammatik nennen wir eindeutig.<br />
Zu jedem eindeutigen Satz einer kontextfreien Grammatik gibt es genau eine Links<strong>und</strong><br />
genau eine Rechtsableitung.<br />
Manchmal ist es günstig, Mehrdeutigkeiten durch Umformen der Grammatik in eine<br />
äquivalente Grammatik zu eliminieren (andere Lösungsmöglichkeiten werden wir<br />
später betrachten). Diese Umformung ist aber nicht <strong>für</strong> jede beliebige Grammatik<br />
möglich, da es Sprachen gibt, die keine eindeutige Grammatik besitzen [AU72]. Außerdem<br />
muß beim Umformen darauf geachtet werden, daß die syntaktische Struktur<br />
der zu erkennenden Sprache nicht verändert wird.<br />
Beispiel 18 (“dangling else”)<br />
Die folgende Grammatik beschreibt eine if-Anweisung, bei der ein optionaler else-<br />
Zweig angegeben werden kann.<br />
stmt → if expr then stmt<br />
| if expr then stmt else stmt<br />
| other<br />
*<br />
id<br />
43