Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
möglichen Alternativen auf <strong>der</strong> rechten Seite sind mittels | getrennt. Sie werden als syntaktische Alternativen<br />
bezeichnet. Falls auf <strong>der</strong> rechten Seite einer Regel (also auch <strong>der</strong> Startregel) ein Non-Terminalsymbol<br />
auftritt, wird dieses durch eine <strong>der</strong> Alternativen auf <strong>der</strong> rechten Seite einer Regel ersetzt, bei <strong>der</strong> dieses<br />
Non-Terminalsymbol links steht. Terminalsymbole werden direkt Bestandteil des zu konstruierenden Satzes.<br />
In einem konkreten Satz erscheinen dabei konkrete Elemente <strong>der</strong> Grundmengen Namen und Kostanten. In<br />
unserem Beispiel mit Peter und dem Apfel, wären Subjekt, Prädikat und Objekt Grundmengen, die in diesem<br />
Satz verwendeten Elemente wären Peter (als Element <strong>der</strong> Menge Subjekt), ißt (als Element <strong>der</strong> Menge<br />
Prädikat) und einen Apfel (als Element <strong>der</strong> Menge Objekt). Dieser Prozeß wird solange fortgeführt, bis alle<br />
Non-Terminalsymbole durch Terminalsymbole ersetzt sind. Dabei kann jede Regel beliebig häufig (d.h. auch<br />
gar nicht) angewandt werden, vorausgesetzt, ihre linke Seite ’paßt’. Das folgende Beispiel enthält den Nachweis,<br />
daß <strong>der</strong> Satz a ∗ b + c eine syntaktisch korrekte Formel ist, d.h., daß er mit <strong>der</strong> obigen Grammatik ableitbar<br />
ist. Dabei steht −→ für ’wird abgeleitet zu’ und die Nummer rechts bezeichnet die verwendete Regel).<br />
Formel −→ Formel + Term [2]<br />
−→ Term + Term [1]<br />
−→ Term ∗ Faktor + Term [5]<br />
−→ Faktor ∗ Faktor + Term [4]<br />
−→ a ∗ Faktor + Term [8]<br />
−→ a ∗ b + Term [8]<br />
−→ a ∗ b + Faktor [4]<br />
−→ a ∗ b + c [8]<br />
In diesem Beispiel werden die mathematischen Ausdrücke in <strong>der</strong> sogenannten Infix-Notation dargestellt. Hierbei<br />
steht <strong>der</strong> Operator zwischen (in) den Operanden. a+b wäre ein typisches Beispiel für die Infix-Darstellung<br />
(o<strong>der</strong> -Notation). Bei Operatoren mit mehr als zwei Operanden ist diese Schreibweise nicht mehr gut verwendbar.<br />
Stattdessen wird in solchen Fällen die Prefix-Darstellung, <strong>der</strong> Operator steht vor den Operanden,<br />
verwendet. In <strong>der</strong> Prefix-Darstellung könnte die zwei-stellige Vergleichsoperation ≥ mit den Parametern a<br />
und b als ≥(a, b) geschrieben werden.<br />
Wenn hier von Syntax die Rede ist, dann gehen wir immer davon aus, daß eindeutig zu identifizieren ist,<br />
welcher Art Objekt ein Wort <strong>der</strong> Sprache ist, d.h. zu welcher Grundmenge es gehört. Dies ist, was die natürliche<br />
Sprache betrifft u.U. eine unzulässige Annahme, wie das folgende Beispiel zeigt:<br />
Peter zieht gerade Linien<br />
Hier ist nicht klar zu entscheiden, ob gerade ein Adjektiv o<strong>der</strong> eine zeitliche Bestimmung ist; sind die Linien, die<br />
Peter zieht, gerade, o<strong>der</strong> ist er just in diesem Augenblick dabei Linien (u.U. krumme) zu ziehen? Ein ähnliches<br />
Problem ergibt sich auch im Fall mehr formaler Sprachen, z.B. Programmiersprachen. Die Anweisung<br />
if a ≤ b then if b ≤ c then x := a else x := c<br />
ist mehrdeutig, da unklar ist, zu welcher if-Anweisung das else gehört. Mithin stellt sich im Fall von a > b<br />
die Frage nach dem Wert von x. Hier muß die Struktur <strong>der</strong> Anweisung eindeutig interpretierbar sein. Wir<br />
gehen hier immer davon aus, daß die Elemente unserer Grundmengen disjunkt sind, d.h., daß jedem Element<br />
des Alphabetes genau eine Menge zugeordnet werden kann und daß die Struktur unserer Sätze eindeutig<br />
erkennbar ist. Letzteres bedeutet, daß die Grammatik die Möglichkeit bieten muß, den Ableitungsprozeß zu<br />
rekonstruieren, d.h. einen Ableitungsbaum zu erstellen.<br />
Ein Ableitungsbaum ist eine Darstellung <strong>der</strong> Ableitung unabhängig von <strong>der</strong> Ersetzungsauswahl. Der Ableitungsbaum<br />
zeigt deutlich die Bindungsregeln, die durch die Grammatikstruktur vorgegeben sind. Falls es zur<br />
Erzeugung eines bestimmten Wortes über einer Grammatik nur eine Folge von Regelanwendungen gibt, dann<br />
bezeichnen wir die Herleitung als eindeutig. Eine eindeutige Herleitung erzwingt dabei auch einen eindeutigen<br />
Ableitungsbaum, während es zu einem Ableitungsbaum durchaus auch mehrere Herleitungen geben kann.<br />
Diese unterscheiden sich dann nur in <strong>der</strong> Reihenfolge ihrer Regelanwendungen. In unserem Herleitungsbeispiel<br />
hatten wir z.B. immer das am weitesten links stehende Non-Terminal-Symbol expandiert, wir hätten