Automaten, Formale Sprachen und Berechenbarkeit I
Automaten, Formale Sprachen und Berechenbarkeit I
Automaten, Formale Sprachen und Berechenbarkeit I
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).