22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

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.

dynamische Semantik: Die dynamische Semantik beschreibt das Verhalten eines Programms während<br />

des Ablaufs. Im Rahmen dieser Vorlesung werden wir diese Semantik durch einen Interpretierer von<br />

Eiffel angeben, den wir wie die Prädikatenlogik durch mathematische Funktionen beschrieben. Hierzu<br />

verwenden wir die in Abschnitt 2.3 vorgestellte funktionale Metasprache 36 .<br />

Die dynamische Semantik entspricht <strong>der</strong> Codegenerierung beim Übersetzen.<br />

Die Sprachbeschreibung beschränkt sich in diesem Kapitel bis auf wenige Ausnahmen auf die Syntax, denn<br />

Strukturierungskonzepte sind im wesentlichen Organisationsprinzipien.<br />

3.11.1 Syntax<br />

In <strong>der</strong> Beschreibung von Programmiersprachen gibt es viele Programmbestandteile, die an einer bestimmten<br />

Stelle im Programm vorkommen können – wie zum Beispiel eine inherit-Klausel, eine creation-Klausel, eine<br />

invariant-Klausel, usw. – aber nicht unbedingt müssen. Es wäre sehr unökonomisch und unübersichtlich, alle<br />

möglichen Kombinationen separat aufzulisten. Aus diesem Grunde erweitern wir die Notation <strong>der</strong> in Kapitel<br />

2 (Seite 28) vorgestellten Backus-Naur-Form um die Möglichkeit, Optionen mit anzugeben. Die Notation<br />

Konstrukt ::= Teilkonstrukt [Option]<br />

steht kurz für<br />

Konstrukt ::= Teilkonstrukt | Teilkonstrukt Option<br />

Das bedeutet, daß die in eckigen Klammern angegebene Option an <strong>der</strong> entsprechenden Stelle vorkommen kann,<br />

aber nicht vorkommen muß. Die Verwendung von Optionen vereinfacht die Syntaxbeschreibung ungemein.<br />

Im folgenden werden wir die Syntax <strong>der</strong> bisher vorgestellten Programmteile zusammenfassen 37 . Terminalsymbole<br />

(wie zum Beispiel [ , ; ]) werden im typewriter-Zeichensatz geschrieben, um sie von den Hilfssymbolen<br />

abzugrenzen. Eiffel-Schlüsselworte wie class werden, obwohl sie auch Worte des Terminalalphabets<br />

sind, weiterhin im Fettdruck angegeben. Non-Terminale werden als Worte in normalem Zeichensatz beschrieben.<br />

Startsymbol ist System. Fettgedruckte Konzepte bezeichnen zentrale Begriffe. Unterstrichene Konzepte<br />

werden an mehreren Stellen gebraucht, nicht unterstrichene nur in einem Block.<br />

System ::= Class declaration [System] Ein System besteht aus Klassen<br />

Class declaration ::= [ indexing Index list ]<br />

[ deferred | expanded ] class Class name Klassennamenvereinbarung<br />

[ [ [ Formal generics ] ] ] Generische Parameter<br />

[ obsolete Manifest string ]<br />

[ inherit [ Parents ] ] Erbklausel<br />

[ creation Creation clauses ] Initialisierungsprozeduren<br />

[ feature Feature clauses ] Vereinbarung <strong>der</strong> Features<br />

[ invariant [ Assertions ] ] Zustandkonsistenzbedingung<br />

end [ -- class Class name ]<br />

Index List ::= nicht besprochen – siehe [Meyer, 1992, Seite 49ff]<br />

Class name ::= Identifier<br />

Identifier ::= Siehe Abschnitt 4.4<br />

Formal generics ::= Formal generic [ , Formal generics ]<br />

Formal generic ::= Identifier [ -> Class type ]<br />

36 Warnung: Die beiden Sprachen verwenden ein ähnliches Vokabular, sind aber durch die Art des Drucks stets unterscheidbar.<br />

37 Die Zusammenstellung entstammt [Meyer, 1992, Anhang H/I], wurde jedoch zugunsten <strong>der</strong> besseren Lesbarkeit um einige<br />

Zwischenbegriffe gekürzt und an die Syntaxdiagramme im Anhang J angepaßt. Meiner Ansicht nach enthalten die Anhänge H<br />

und I kleinere Fehler und Unstimmigkeiten zu den Syntaxdiagrammen, die hier – soweit erkennbar – korrigiert wurden.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!