Download (1405Kb)
Download (1405Kb)
Download (1405Kb)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Kapitel 1<br />
Einleitung<br />
Eine Programmiersprache besteht aus zwei Komponenten: ihrer Syntax und ihrer Semantik.<br />
Die Syntax beschreibt die Struktur eines wohlgeformten Programms, d.h. sie besagt, welcher Text<br />
überhaupt ein Programm ist. Diese Eigenschaft muß entscheidbar sein.<br />
Die Semantik ordnet jedem Programm seine Bedeutung zu. Hierbei ist zu beachten, daß einerseits<br />
diese Zuordnung selbst als Semantik der Programmiersprache, andererseits aber auch die Bedeutung<br />
eines Programms als Semantik des Programms bezeichnet wird. Im allgemeinen besitzen mehrere<br />
verschiedene Programme die gleiche Semantik.<br />
Lehrbücher vermitteln die Semantik einer Programmiersprache durch Erklärungen und Beispiele.<br />
Zum Erlernen einer neuen Programmiersprache ist eine derartige informale Beschreibung sicherlich<br />
gut geeignet. Eine vollständige, eindeutige und möglichst nicht zu umfangreiche Definition der<br />
Semantik einer Programmiersprache ist so jedoch nicht erreichbar. Die eingeschränkte Portabilität<br />
von Programmen — auch bei standardisierten Programmiersprachen wie Fortran, Pascal oder C<br />
— zeigt das Problem in der Praxis auf. Einige Aspekte werden in solchen Semantiken oft auch<br />
überhaupt nicht definiert, wie beispielsweise das Verhalten beim Zugriff auf ein Array-Element mit<br />
einem Index außerhalb des vorgegebenen Bereichs. Dies widerspricht jedoch unserer Forderung, daß<br />
die Semantik jedem syntaktisch korrekten Programm eine Bedeutung zuordnen soll. Da das Vorhandensein<br />
eines fehlerhaften Array-Zugriffs auch nicht entscheidbar ist, kann ein solches Programm<br />
auch nicht als syntaktisch fehlerhaft betrachtet werden.<br />
Dagegen bauen formale Semantiken auf bekannten, wohlverstandenen mathematischen Strukturen<br />
auf. Sie ermöglichen die eindeutige und vollständige Definition einer Semantik zur Standardisierung<br />
einer Programmiersprache. Damit unterstützen sie die Entwicklung korrekter Interpreter<br />
und Compiler. Im Zusammenhang mit der Implementierung stehen auch semantikerhaltende<br />
Transformationen eines Programms zu Optimierungszwecken, deren Korrektheit erst mit formalen<br />
Semantiken beweisbar ist. Zur formalen Verifikation von Programmen sind formale Semantiken unverzichtbar.<br />
Schließlich führt eine formale Semantik auch zu einem viel größeren Verständnis einer<br />
Programmiersprache.<br />
Imperative Programmiersprachen sind am Modell der Von-Neumann-Maschine orientiert. Ihre<br />
Semantiken lassen sich zwar formal beschreiben — insbesondere mit den sogenannten axiomatischen<br />
Semantiken —, aber in der Praxis sind derartige Semantiken sehr aufwendig und daher kaum<br />
einsetzbar.<br />
Funktionale Programme sind dagegen maschinenunabhängige Spezifikationen. Wir wollen hier<br />
auf die Schilderung der sich daraus ergebenden Vorteile bezüglich der Anwendungsnähe und flexibleren<br />
Implementierbarkeit verzichten. Da funktionale Programmiersprachen aus mathematischen