| << zur Fortran-Startseite | |
| < F | Cray Pointer > |
Allgemeines
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
| 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
| 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
| << zur Fortran-Startseite | |
| < F | Cray Pointer > |