FORTRAN - KIT · - Operationale Semantik mit ASMs (10) - Operationale Semantik mit natürlicher...

31
Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 (5. Foliensatz) 1 Teil 4 FORTRAN

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