Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
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.