Fortran: Ratfor

Aus Wikibooks
<< 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 C
  • switch-Verzweigung (nur Ratfor 77, ohne break)
  • 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]


  1. w:Brian W. Kernighan
  2. w:en:Ratfiv

<< zur Fortran-Startseite
< F Cray Pointer >