Fortran: Ratfor
<< zur Fortran-Startseite | |
< F | Cray Pointer > |
Allgemeines
[Bearbeiten]Ratfor (Rational Fortran) ist zum Großteil eine Mischung aus C und Fortran. Es entstand aus der Begeisterung Brian W. Kernighans[1] für die Programmiersprache C. In einer Zeit, als C seinen Siegeszug antrat und Programmierer mit den zum Teil noch archaischen Sprachmerkmalen von FORTRAN 66 und 77 konfrontiert waren, hatte er die fixe Idee, dass auch Fortran-Programmierer mit der Syntax von C beglückt werden müssen. Ratfor-Code wurde dann per Präprozessor in Fortran-Code umgewandelt, um danach den Gang alles Fortran-irdischen zu gehen und per schnödem Fortran-Compiler in Maschinencode übersetzt zu werden. Ratfor dürfte sich einer gewissen Popularität erfreut haben. Darauf deutet auch hin, dass sogar für Fortran 90 ein entsprechender Ratfor-Präprozessor in Form eines Perl-Skripts geschaffen wurde. Gerüchten zufolge wurde in den '80er Jahren des vergangenen Jahrhunderts als möglicher Nachfolger von Ratfor ein Ratfiv [2] realisiert.
Hier nun einige der wesentlichen Ratfor-Sprachmerkmale:
- Die fixe Zeilenform aus FORTRAN 77 entfällt
- Anweisungen werden mit Strichpunkt abgeschlossen
- Blöcke werden in geschweifte Klammern eingefasst
for
-Schleifen,if
-Verzweigungen, etc. nach Art der Programmiersprache Cswitch
-Verzweigung (nur Ratfor 77, ohnebreak
)- Kommentare werden mit # eingeleitet
<, <=, ..., !=
anstelle von.LT., .LE., ..., .NE.
- etc.
Nachfolgend je ein kleineres Beispiel, um einen kurzen Einblick in Ratfor 77 und Ratfor 90 und die aus diesen Ratfor-Codes per Präprozessor generierten Fortran-Codes zu geben.
Ratfor 77
[Bearbeiten]Ratfor | FORTRAN 77 |
---|---|
program bsp i = 2 switch(i){ case 1: write(*, *) "Fall 1"; case 2: write(*, *) "Fall 2" default: write(*, *) "Default" } end |
C Output from Public domain Ratfor, version 1.0 program bsp i = 2 I23000=(i) goto 23000 23002 continue write(*, *) "Fall 1" goto 23001 23003 continue write(*, *) "Fall 2" goto 23001 23004 continue write(*, *) "Default" goto 23001 23000 continue if (I23000.eq.1)goto 23002 if (I23000.eq.2)goto 23003 goto 23004 23001 continue end |
Ratfor 90
[Bearbeiten]Ratfor | Fortran 90 |
---|---|
# Ratfor 90 - Beispiel program bsp integer :: i real :: x = 10.5 if( x != 10.0 ) { for( i = 0; i < 3; i = i + 1 ) { write(*,*) 'IF Hallo ', i; } } else { write(*,*) 'ELSE Hallo'; } end program bsp |
! Ratfor 90 - Beispiel program bsp implicit none integer :: i real :: x = 10.5 if ( x .ne. 10.0 ) then i=0 do if(.not. (i<3)) then exit end if write(*,*) 'IF Hallo ', i i=i+1 end do else write(*,*) 'ELSE Hallo' end if end program bsp |
Weblinks
[Bearbeiten]<< zur Fortran-Startseite | |
< F | Cray Pointer > |