home *** CD-ROM | disk | FTP | other *** search
- Die Syntax von Simula-67
-
- Obwohl Simula-Programme auf Anhieb gut
- lesbar sind, finden sich in der Syntax
- dennoch ein paar verzwickte Details, die Sie
- in anderen Programmiersprachen in dieser
- Form nicht finden. Die Syntax von Simula-67
- wird daher an Hand des Programmes Memo_Fun.TXT
- Schritt für Schritt erklärt.
- Dieses Programm stellt eine abgeschlossene
- Anwendung dar und kann ohne Änderungen
- compiliert und ausgeführt werden.
-
- Zeile 1-3: Kommentare werden mit COMMENT
- oder einem Ausrufezeichen eingeleitet und
- mit einem Strichpunkt abgeschlossen. Ein
- "beliebter" Anfängerfehler ist es, in einem
- längeren Kommentar irrtümlich ein Semikolon
- im erklärenden Text zu verwenden.
-
- Zeile 4: Jedes Programm muß ein zwischen
- BEGIN und END eingeschlossener Block sein.
-
- Zeile 14-65: Syntaktisch ist eine
- Klassendefinition der Vereinbarung eines
- Unterprogramms nachgebildet. Daher werden
- zunächst einmal die Parameter einer Klassen
- vereinbart und erst später die
- unveränderlichen Teile. Leider ist es nicht
- möglich, als Klassenparameter Prozeduren zu
- übergeben, obwohl dies, wie die Definition
- von CALC in Zeile 32 zeigt, bei
- Unterprogrammen problemlos der Fall ist.
-
- Zeile 16-65: Hier steht der
- nicht-parametrierbare Teil der Klasse.
-
- Zeile 17-22: Die Klasse MEMOFUN enthält
- lokal die Definition einer weiteren Klasse,
- WERTEPAAR. Diese Verwendung einer Klasse
- entspricht dem RECORD in Pascal.
-
- Zeile 22: Kommentare dürfen auch nach END
- stehen und werden dann durch ein Semikolon
- oder auch - innerhalb einer IF-Konstruktion
- - durch ein ELSE abgeschlossen.
-
- Zeile 30-31: Die beiden
- nicht-parametrierbaren Variablen der Klasse
- MEMOFUN, MEMLIST und NEUEST werden hier
- definiert. Beachten Sie, daß die obere
- Grenze des Arrays MEMLIST vom
- Klassenparameter N abhängt und damit zur
- Laufzeit berechnet wird!
-
- Zeile 32-58: Die Klasse MEMOFUN enthält eine
- Prozedur CALC. Diese Prozedur erwartet zwei
- Parameter, F und X. F ist selbst eine
- Prozedur, während X als Werteparameter vom
- Typ REAL vereinbart wird. Beachten Sie
- bitte, daß in der Deklaration des formalen
- Parameters F nichts über Typ und Anzahl der
- Parameter von F ausgesagt wird. Diese
- Information muß sich der Compiler selbst aus
- dem umgebenden Code ableiten!
-
- Zeile 42: NONE entspricht dem Nullpointer
- (in Pascal würden Sie NIL schreiben), "=="
- testet zwei Zeiger auf Gleichheit. Zum
- Unterschied dazu würde "=" die Objekte, auf
- die die Zeiger zeigen, auf Gleichheit
- testen. OR ELSE entspricht dem Operator "||"
- in C; das rechte Argument wird also nur
- berechnet, wenn das linke Argument FALSE
- ergibt.
-
- Zeile 47-48: Hier wird bei Bedarf
- Speicherplatz für ein neues Objekt beschafft
- (NEW) und dessen Adresse auf memlist(i)
- gespeichert (":-").
-
- Zeile 49: Zum Unterschied dazu überträgt
- ":=" nicht die Adresse, sondern das Objekt
- selbst.
-
- Zeile 59-65: Dieser Code wird ausgeführt,
- wenn ein neuese Objekt der Klasse MEMOFUN
- mittels NEW angelegt wird. Die
- Befehlsklammern BEGIN...END sind hier nur
- notwendig, weil dieser Initialisierungsteil
- eine eigene lokale Variable, I, definiert.
-
- Zeile 67-73: Die Funktion BEISPIEL berechnet
- das Quadrat ihres Argumentes x. Der Rumpf
- einer Simula-Prozedur ist immer eine einzige
- Anweisung. Wenn man mehrere Statements zur
- Berechnung des Funktionswertes benötigte,
- müßten Sie mit BEGIN...END klammern.
-
- Zeile 75-87: Der Code außerhalb einer CLASS
- oder PROCEDURE stellt das Hauptprogramm dar.
-
- Zeile 84-85: Die Ein/Ausgabe erfolgt über
- spezielle Prozeduren, also ähnlich wie in
- Modula-2. OUTREAL(x,d,w) gibt die REAL-Zahl
- x auf die Standardausgabe aus. Dabei werden
- d signifikante Ziffern berechnet und in
- einem Bereich von w Zeichen untergebracht.
- Die Ausgabe erfolgt gepuffert. OUTIMAGE
- leert den Puffer und sorgt automatisch für
- den Zeilenvorschub.
-
-
-