FORTRAN - KIT · - Operationale Semantik mit ASMs (10) - Operationale Semantik mit natürlicher...
Embed Size (px)
Transcript of FORTRAN - KIT · - Operationale Semantik mit ASMs (10) - Operationale Semantik mit natürlicher...
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 1
Teil 4
FORTRAN
-
Inhaltsübersicht HPS WS 2003/04
- - Grundlagen (1,2)- Konzepte imperativer Programmiersprachen (2,3)- Deklarative Programmiersprachen (4)- Objektorientierte Programmiersprachen (5,6)- Programmierung von Smart Cards: Java Card (7)- Wissenschaftliches Rechnen: Fortran (8)- Wirtschaftsanwendungen: Cobol (8, 9)- Skriptsprachen (9)
- Formale Semantik - Operationale Semantik mit ASMs (10) - Operationale Semantik mit natürlicher Semantik und SOS (11) - Denotationelle Semantik (12, 13) - Axiomatische Semantik (14)
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 3
Teil 4
●FORTRAN● (FORmula TRANslator)
● Fortran I: 1954
● Fortran IV: 1966
● Fortran 77: 1977
● Fortran 90: 1990
● Fortran 95: 1995
● high performance FORTRAN (HPF): Fortran 90 für SIMD-Rechner
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 4
Programmformate
● Festes Programmformat
– veraltet
– Ursprung im Lochkartenformat
● Freies Programmformat
– Alle neueren FORTRAN Versionen
● Standardzeichensatz: Großbuchstaben und _, Ziffern, Sonderzeichen
– Kleinbuchstaben äquivalent zu Großbuchstaben(Vorsicht an externen Schnittstellen: foo = FOO)
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 5
Festes Format
● Spalte 1: Kommentarzeichen ( C , * , ! )● 1-5 Marke als Sprungziel (nat. Zahl)
beliebige Position, führende 0 ignoriert ● 6 beliebiges Zeichen kennzeichnet Fortsetzungszeile, sonst leer● 7-72 Programm● 73-80 Kommentar (fortlauf. Numerierung)
● Keine Unterscheidung Bezeichnern und Wortsymbolen ● Leerzeichen in Wortsymbolen erlaubt● Wortsymbole in Ausdrücken in der Form .gt.
d.h. mit Punkt eingegrenzt● Fortran 77: max. 8 Zeichen für Bezeichner
● Beachte:– Alle Anweisungen in Fortran beginnen mit Wortsymbol außer Zuweisung
und Definition Anweisungsfunktion (statement function)
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 6
Beispiel
PROGRAM SUMMEC Dies ist ein Fortran 77 Programm COMMON /CB/ M CALL TOTAL WRITE (6,9) M 9 FORMAT (I10) END
SUBROUTINE TOTAL ! dies ist ein Zeilenendkommentar COMMON /CB/ ITOTAL ITOTAL = 0 DO 8 I = 1, 100 ITOTAL = 1ITOTAL + I 8 CONTINUE END2 Übersetzungseinheiten
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 7
Beispiel Fortran 90/95
PROGRAM SUMMEC In Fortran 90/95 geht das auch so: INTEGER ITOTAL CALL TOTAL(100) PRINT *, ITOTAL
CONTAINS
SUBROUTINE TOTAL(N) ITOTAL = 0 DO I = 1, N ITOTAL = ITOTAL + I END DO END SUBROUTINE TOTAL
END PROGRAM SUMME1 Übersetzungseinheit
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 8
Beispiel Fortran 90/95 mit Modul
MODULE SUMMIEREN CONTAINS FUNCTION TOTAL(N) INTEGER TOTAL, N, I TOTAL = 0 DO I = 1, N TOTAL = TOTAL + I END DO END FUNCTION TOTAL END MODULE SUMMIEREN
PROGRAM SUMMEC In Fortran 90/95 geht das auch so: USE SUMMIEREN PRINT *, TOTAL (100) END PROGRAM SUMME2 Übersetzungseinheiten
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 9
Freies Format
● Zeilen bis 132 Zeichen,
● Spaltenposition bedeutungslos
● Strichpunkt trennt mehrere Anweisungen auf gleicher Zeile
● Fortsetzungszeichen: & am Zeilenende
● Leerzeichen in Wortsymbolen verboten
● max. 31 Zeichen für Bezeichner
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 10
Klassifikation
Unterscheide
● Ausführbare Anweisungen
– ASSIGN, DO, PRINT, IF, END IF,...
● Nichtausführbare Anweisungen:
– Spezifikationsanweisungen
● FORMAT, COMMON, DATA,...
– Typvereinbarungen (in Wahrheit Variablenvereinbarungen)
● INTEGER, COMPLEX,...
– Strukturierungsanweisungen
● FUNCTION, SUBROUTINE, MODULE,...
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 11
Türme von Hanoi
program hanoi write (6,*) 'Wert fuer N an: '; read (5,*) n call hanoi0 (n,'A','B','C')
contains
subroutine move (von,nach) ...end subroutine move
recursive subroutine hanoi0 (n,von,nach,ueber) integer :: n
character :: von, nach, ueberif (n .eq. 1) then call move (von, nach) else if (n .gt. 1) then
call hanoi0 (n-1, von, ueber, nach) call move (von, nach)
call hanoi0 (n-1, ueber, nach, von) end if
end subroutine hanoi0end program hanoi
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 12
Programmaufbau
– Hauptprogramm, ausführbar:
● PROGRAM name ... CONTAINS ... END PROGRAM name
– Externes Unterprogramm, ausführbar:
● SUBROUTINE name ... CONTAINS ... END SUBROUTINE name
● FUNCTION name ... CONTAINS ... END FUNCTION name
– Modul, nicht ausführbar:
● MODULE name ... CONTAINS ... END MODULE name
– Block-Data, nicht ausführbar:
● BLOCK DATA name ... END BLOCK DATA name
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 13
Vordefinierte Datentypen
● INTEGER: Ausschnitt der ganzen Zahlen, parametrisiert mit KIND Attribut ● REAL: Annäherung an reelle Zahlen mit KIND ● COMPLEX: KIND wie REAL ● LOGICAL: Boolesche Werte, KIND für Anzahl Bytes● CHARACTER: KIND für Zeichendarstellung, LEN für Anzahl Bytes
● KIND: Parametrisierung kennzeichnet Genauigkeit/Werteumfang, z.B.– INTEGER (KIND = HIGH) zufall– INTEGER (KIND = SHORT) wochentag– COMPLEX (KIND = HIGH) z
● HIGH, SHORT, ... benannte ganzzahlige Konstante● Fortran 77: Neben Typ REAL noch DOUBLE PRECISION● Vereinbarungen in der Form
– INTEGER i,j ! alt– INTEGER (Zusätze) i,j ! alt, z.B. Zusatz SAVE: Wert erhalten– INTEGER :: i,j ! neu– INTEGER, Zusätze :: i,j ! neu
● implizite Vereinbarung: Bezeichner beginnend mit I,J,K,L,M,N ganzzahlig, sonst real
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 14
Weitere Datentypen
– Reihungen
● statische● offene
– Verbunde
– Zeiger und Ziele von Zeigern
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 15
Statische Reihungen
● Reihungen spaltenweise gespeichert! (column major order)● reihung ::= typ [par][, attribute]
[, DIMENSION ( indexgrenzen )]:: name [( indexgrenzen )][=ausdruck]● indexgrenzen ::= [untergrenze : ] obergrenze● untergrenze und obergrenze konstant● Indexgrenzen gehören zum Typ● INTEGER A(100) ! Untergrenze 1● REAL, DIMENSION(0:100,0:100) :: x
– mit Initialisierung durch DATA Anweisung:● REAL :: x (100,100)= RESHAPE((/ ((1.0,K=1,J-1),& (0.0,K=J,100), J=1,100) /), SHAPE = (/ 100, 100 /) )
● REAL :: y (100,100)DATA ((y (K,J), K=1,J-1), J= 1,100) / 4050*1.0 /DATA ((y (K,J), K=J,100), J= 1,100) / 5050*0.0 /
● Reihungszugriff:– a(i,j) ! kein Unterschied zu Funktionsaufruf– a(i,:) ! i-te Zeile– a(i,10:1:-1) ! Elemente ai,10, ai,9,...,ai,1
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 16
Equivalence Anweisung
● Ziel: Überlagerung mehrerer Variablen, meistens Reihungen, im Speicher
● Methode: Angabe von Gruppen von Variablen, insbesondere Reihungselementen, die den gleichen Speicherplatz einnehmen sollen; der Rest der Reihungen wird dann entsprechend überlagert. Vorsicht! Widersprüche werden beanstandet!
– REAL A(10,10), B(100)EQUIVALENCE (A,B)
– REAL A(100)COMPLEX Z(50)EQUIVALENCE (A,Z)
– REAL A(100)REAL X,Y,Z(98)EQUIVALENCE (Y,A(1)),(X,A(100)),(Z(50),A(51))
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 17
Offene Reihungen
● Ziel wie in Pascal: Vereinbarung von Parametern oder Variablen, deren Umfang bei Aufruf oder durch explizite Allokation festgelegt wird
– Anzahl der Indexgrenzen, repräsentiert durch Doppelpunkt mit/ohne Grenzen, gehört zum Typ
SUBROUTINE f (reihung , n , m) INTEGER n, m REAL, DIMENSION(0:n,0:m) :: reihung
● REAL A(:,:)
● INTEGER, DIMENSION (:,:) :: K
● CHARACTER, ALLOCATABLE :: C (:,:)
● ALLOCATE (C(100,100))
● REAL A(2:4,*) ! Werte werden so verteilt, daß 3 Zeilen entstehen
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 18
Verbunde
● Typdeklaration:
● typdef ::= TYPE [[,zugriffsrecht] ::] name [ PRIVATE ][ SEQUENCE ] komp* END TYPE [name]
● komp ::= typ [par][[,attribute] ::] namesliste
●
● Variablendeklaration
– vardekl ::= typ [par][[,attribute] ::] namesliste Komponentenzugriff:
– zugriff ::= verbundname % komponentenname
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 19
Zeiger und ihre Ziele
– zeiger ::= typ [par][,attribute], POINTER :: name [(:[,:]*)]
– ziel ::= typ [par][,attribute], TARGET :: name[( indexgrenzen )][=ausdruck]
– Rekursive Datenstrukturen● TYPE liste ● INTEGER wert ● TYPE (liste), POINTER :: next ● END TYPE liste
● TYPE (liste), TARGET :: anker● TYPE (liste), POINTER :: temp, hinten
● hinten = anker ● ALLOCATE(temp)● hinten%next = temp
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 20
Ausdrücke
● Numerische Datentypen:
– Addition, Subtraktion, Division, Exponentiation, Negation, Identität, weitere mathematische Funktionen, Vergleiche
● Vektoren und Matrizen: elementweise Operationen, Skalarprodukt, Transposition, Matrixmultiplikation, Maximum, Minimum, Summe, Produkt
● Logischer Datentyp:
– Negation, Konjunktion, Disjunktion, Äquivalenz, Antivalenz.
– Matrizen: ALL und ANY .
● Zeichen: Verkettung zu Feldern.
● Selbstdefinierte Operationen möglich.
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 21
Prioritäten
– 1 selbstdefiniert einstellig
– 2-4 Numerische Operationen,
– 5 Verkettung,
– 6 Vergleichsoperatoren,
– 7-10 Logische Operatoren,
– 11 selbstdefinierte zweistellig
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 22
Ablaufsteuerung
– Sprünge
– Bedingte Anweisungen und Sprünge
– Schleifen
– Prozeduren und Funktionen
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 23
Sprünge
– goto ::= GOTO label
– berechnetes goto ::= GOTO ( label1, label2, label3 ...) skalarer numerischer ausdruck
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 24
Bedingte Anweisungen und Fallunterscheidungen
– arithmetisches if ::= IF ( skalarer ausdruck ) label1, label2, label3
● inzwischen veraltet– logisches if ::= IF ( logischer ausdruck ) anweisung*
– block if ::= IF ( logischer ausdruck ) THEN ... [ELSE IF ...]*[ELSE ...] END IF
– Fallunterscheidung
● case ::= SELECT CASE ( ausdruck ) [CASE ( ausdruck ) ... ]* [CASE DEFAULT ... ] END SELECT
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 25
Schleifen
– schleife ::= [name:] DO schleifensteuerung ... END DO [name]
– alt: schleife ::= [name:] DO label schleifensteuerung ... label ende anweisung– ende anweisung ::= continue | beliebig
– schleifensteuerung ::= leer | for | while
– for ::= i = anfang, ende [,increment] [,] while
– while ::= WHILE ( logischer ausdruck )
– exit ::= EXIT [name]
– cycle ::= CYCLE [name]
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 26
Zuweisungen, forall-Schleifen
● Normale Zuweisung: Variable = Ausdruck● Zeigerzuweisung: Zeiger => Zielobjekt● maskierte Reihungszuweisung:
real A(10,10)where (A /= 0.0)
A_NEU = 1.0/Aelsewhere
A_NEU = 1.0END WHERE
● forall-Schleife: forall (I = 1:N, J = 1:M) A(I,J) = I+J– zusätzlich kann ein logischer Ausdruck einzelne Zweige ausblenden
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 27
Prozeduren und Funktionen
● Externe und Interne Prozeduren● [RECURSIVE] FUNCTION name ...
END FUNCTION name
– Ergebnis an Funktionsname zuweisen, dieses als Variable vereinbaren● [RECURSIVE] SUBROUTINE name ... END SUBROUTINE name ● ENTRY name ... END SUBROUTINE name
– weiterer Eingang in Unterprogramm● Reine Prozeduren (PURE procedures): Prozeduren ohne Nebenwirkung (für FORALL)● Aufruf von Unterprogrammen: CALL subroutinename(...)● Parameterübergabe: Referenzaufruf oder Wert/Ergebnisaufruf, oder
INTENT(IN) INTENT(OUT) INTENT(INOUT)
● Parameter können optional sein● generische Prozedur: überladene Prozedur, zur Auflösung Argumentliste benutzen● Block Data: Unterprogramm zur (statischen) initialisierung von COMMON Zonen
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 28
Ein-/Ausgabe
● E/A durch die Anweisungen READ, PRINT, WRITE, OPEN, CLOSE, INQUIRE, BACKSPACE, ENDFILE, REWIND (keine Prozeduraufrufe!)
● Dateien intern gekennzeichnet durch ganze Zahlen (unit number)– Standard-Eingabe: 5, Standardausgabe: 6, (Standards, wenn nichts angegeben)– unterscheide externe (echte) und interne Dateien (lokal im Programm)– Zugriffsmethoden: sequentiell, direkt
● formatierte Text-E/A: READ (UNIT=5,FMT=FMT) EA-Liste oder kürzerREAD FMT EA-Liste, analog für WRITE (PRINT erlaubt nur die Kurzform)– EA-Liste enthält Variable/Ausdruck oder Schleifen (EA-Liste, i=anfang,ende)
● auch Ausgabe von ganzen Reihungen und Verbunden erlaubt– Format FMT: * (implizite Formatierung), Textkonstante/Marke einer Formatanw.
● 'A6', 'E10.3', 'F10.3', 'I3', 'G10.3', '5I3', '3(I3,2F10.3)' formatiert Texte, reelle Zahlen mit/ohne Exponent, ganze Zahlen, beliebiges, ...
● Formatkontrolle wiederholt anwenden, wenn nicht ausreichend viele Spez.● erstes Zeichen bei Ausgabeformat: Druckersteuerung: Zwi: neue Zeile, 0: mit
Leerzeile, 1: neue Seite, +: kein Zeilenvorschub
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 29
Module in Fortran 77
– Benannte Common Bereiche
– Partitionierung bezüglich der verwendeten globalen Daten ist Modularisierung
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 30
Module in Fortran 90
● MODULE name
● [ use ]
● [ deklarationen ]
● [ typdefinitionen ]
● [ schnittstellen ]
● [ [ CONTAINS
● [ module-unterprogramme ] ] END MODULE
-
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 31
– provide ::= INTERFACE [ OPERATOR ] name MODULE PROCEDURE
prozedurname ... END INTERFACE
– require ::= INTERFACE prozedurkopf ... END INTERFACE
Schnittstellen