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.
Für die Zuordnung zwischen <strong>der</strong> Objekten <strong>der</strong> Quellsprache und denen <strong>der</strong> Zielsprache benötigen wir wie<strong>der</strong>um<br />
eine Metasprache. Diese entspricht <strong>der</strong> BNF im Fall <strong>der</strong> Syntax. Deren Elemente werden wir jedoch nur<br />
insoweit einführen, als daß wir sie aktuell benötigen. Später, bei <strong>der</strong> Definition <strong>der</strong> Programmiersprache Eiffel,<br />
werden wir weitere Konstruktionselemente kennenlernen. Hier soll zunächst am Beispiel <strong>der</strong> Aussagenlogik<br />
die prinzipielle Vorgehensweise dargestellt werden.<br />
Im ersten Schritt definieren wir die Zielsprache. Wir führen zunächst die Objekte <strong>der</strong> Zielsprache ein:<br />
Ziel Wahrheitswerte = { wahr, falsch}<br />
Ziel Operatoren = { und, o<strong>der</strong>, nicht, impl, gleich }<br />
und legen weiter fest, daß für die Anwendung <strong>der</strong> Ziel Operatoren auf die Ziel Wahrheitswerte folgende Wertetabelle<br />
gelten soll. Dabei zeigt in <strong>der</strong> folgenden Tabelle jede Zeile für eine mögliche Wertekombination von<br />
b und c den Wert <strong>der</strong> fünf zielsprachlichen Operationen.<br />
b c (nicht b) (b und c) (b o<strong>der</strong> c) ( b impl c) (b gleich c)<br />
falsch falsch wahr falsch falsch wahr wahr<br />
falsch wahr wahr falsch wahr wahr falsch<br />
wahr falsch falsch falsch wahr falsch falsch<br />
wahr wahr falsch wahr wahr wahr wahr<br />
Abbildung 2.7: Wahrheitstafel für die Aussagenlogik<br />
Der Wert einer Aussage mit mehr als einem Operator wird dadurch bestimmt, daß obige Tabelle solange auf<br />
die Teilaussagen angewandt wird, bis die gesamte Aussage auf wahr o<strong>der</strong> falsch reduziert ist.<br />
Beispiel: ((wahr und falsch) o<strong>der</strong> (wahr und wahr)) ❀ (falsch o<strong>der</strong> wahr) ❀ wahr<br />
An dieser Stelle wird ’❀’ benutzt, um die sich aus <strong>der</strong> Wahrheitstafel ergebende Gleichheit zu beschreiben.<br />
❀ ist dabei kein Element <strong>der</strong> Sprache <strong>der</strong> Aussagenlogik. Da es aber nur endlich viele Symbole für die<br />
verschiedenen Gleichheiten gibt und meist ohnehin aus dem Kontext entscheidbar ist, welches gemeint ist,<br />
werden wir im folgenden statt ❀ immer = schreiben.<br />
Nun sind wir in <strong>der</strong> Lage, in <strong>der</strong> Zielsprache zu rechnen. Der nächste Schritt besteht darin, den Zusammenhang<br />
zwischen Ausdrücken <strong>der</strong> Quell- und denen <strong>der</strong> Zielsprache festzulegen.<br />
Hierzu benötigen wir zunächst den Begriff <strong>der</strong> Funktionalität. Die Funktionalität gibt an, welche Typen<br />
Objekte haben dürfen, auf die eine Funktion angewendet werden soll. Typen sind dabei Mengen. Ein Beispiel<br />
aus <strong>der</strong> Analysis möge dies einführen. Die Funktionalität <strong>der</strong> Wurzelfunktion kann beschrieben werden als:<br />
√ : Reelle-Zahl → Reelle-Zahl<br />
Dieser Ausdruck ist so zu interpretieren, daß √ eine Abbildung von Reelle-Zahl nach Reelle-Zahl ist. Es wird<br />
also gefor<strong>der</strong>t, daß die Funktion √ nur auf Elemente aus <strong>der</strong> Menge <strong>der</strong> reellen Zahlen angewendet werden<br />
darf. Ergebnis ist immer ein Element aus <strong>der</strong> Menge rechts des letzten Pfeils. Allgemeiner könnte man auch<br />
schreiben:<br />
√ : Reelle-Funktion → Reelle-Funktion<br />
Hier wäre Reelle-Funktion eine Funktion, die ihrerseits eine reelle Funktion als Ergebnis liefert. Diese Verallgemeinerung<br />
ist sinnvoll, da nur so beschrieben werden kann, daß Funktionen auf Funktionen angewendet<br />
werden dürfen. Ein Beispiel hierfür ist die Funktion 3 √ , die durch Anwendung <strong>der</strong> Funktion √ auf die Funk-<br />
tion 3 √ entsteht. Ein weiteres Beispiel ist die wohl bekannte Multiplikationsfunktion. Üblicherweise schreiben<br />
wir: a ∗ b = c, alternativ könnte man dies jedoch als mult(a, b) = c schreiben. Die erste Schreibweise bezeichnet<br />
man auch als Infix-Notation und die zweite als Prefix-Notation. mult ist eine zweistellige Funktion,<br />
mit mult : IR × IR→IR. Man mache sich deutlich, daß natürlich auch gilt: ∗ : IR × IR→IR. Durch die Infix-<br />
Schreibweise wird weniger deutlich, daß ∗, + usw. natürlich auch Funktionen sind und zwar Funktionen <strong>der</strong><br />
Stelligkeit zwei.