27.11.2014 Aufrufe

Automaten, Formale Sprachen und Berechenbarkeit I

Automaten, Formale Sprachen und Berechenbarkeit I

Automaten, Formale Sprachen und Berechenbarkeit I

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

62 KAPITEL 3. KONTEXTFREIE SPRACHEN<br />

- Für eine kontextfreie Grammatik ist nicht entscheidbar, ob sie mehrdeutig ist oder nicht!<br />

Das können wir hier noch nicht beweisen.<br />

- Selbst wenn wir wissen, daß eine Grammatik mehrdeutig ist, können wir dazu nicht immer<br />

eine äquivalente eindeutige Grammatik angeben! Im Beispiel 3.3.2 haben wir eine<br />

inhärent mehrdeutige kontextfreie Sprache angegeben; für die kann per Definition keine<br />

eindeutige kontextfreie Grammatik existieren.<br />

Ganz so dramatisch sind die negativen Resultate in der Praxis jedoch nicht:<br />

- Für die meisten praktisch relevanten <strong>Sprachen</strong> gibt es eine eindeutige kontextfreie Grammatik.<br />

Dies trifft insbesondere auf die bedingten Anweisungen aus Beispiel 3.2 zu. Allerdings<br />

sind diese eindeutigen Grammatiken meist deutlich komplizierter.<br />

Sie können sich ja mal die LALR(1)-Grammatik der Java-Syntax in „The Java Language Specification“<br />

(Chapter 19) ansehen.<br />

- Für die Syntaxanalyse schränkt man aus Effizienzgründen die Grammatiken ohnehin noch<br />

viel stärker ein; diese stärkeren Bedingungen sind entscheidbar <strong>und</strong> implizieren die Eindeutigkeit<br />

der Grammatik (siehe Abschnitt 5).<br />

Die Eindeutigkeit bzw. die Mehrdeutigkeit einer Grammatik wurde über die Ableitungsbäume<br />

definiert. Eingangs hatten wir bereits festgestellt, daß eine Definition direkt über die Ableitungen<br />

weniger sinnvoll ist, da es für einen Ableitungsbaum wegen der Vertauschbarkeit unabhängiger<br />

Ableitungsschritte im allgemeinen mehrere verschiedene korrespondierende Ableitungen<br />

gibt. Ein Beispiel dafür ist in Abb. 3.2 angegeben. Wenn jedoch die unabhängigen Ableitungs-<br />

A<br />

<br />

A + A<br />

a b<br />

A → A + A → a + A → a + b<br />

A → A + A → A + b → a + b<br />

Abbildung 3.2. Ein Ableitungsbaum mit zwei verschiedenen korrespondierenden Ableitungen<br />

schritte in einer Ableitung immer in einer festgelegten Reihenfolge angewendet werden, gibt<br />

es immer eine ausgezeichnete Ableitung. Dann läßt sich die Mehrdeutigkeit über diese kanonischen<br />

Ableitungen definieren.<br />

Im wesentlichen gibt es zwei Möglichkeiten, diese kanonischen Ableitungen zu definieren. Entweder<br />

wird in jedem Ableitungsschritt eine Regel auf die am weitesten links stehende Variable<br />

angewendet (dann sprechen wir von einer Linksableitung), oder es wird in jedem Ableitungsschritt<br />

eine Regel auf die am weitesten rechts stehende Variable angewendet (dann sprechen wir<br />

von einer Rechtsableitung).

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!