08.10.2013 Aufrufe

Download (1405Kb)

Download (1405Kb)

Download (1405Kb)

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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!