07.02.2013 Aufrufe

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!