まずはじめに、copyプログラム2014年09月21日 09:43

RATFORは、FORTRANを拡張した言語です。拡張した部分は、ほとんど、 構造化プログラミング向けの構文です。BNF記法でRATFORのプログラムを まとめると、次のようになります。

プログラム | 文
           | プログラム 文
文         | if ( 条件 ) 文
           | if ( 条件 ) 文 else 文
           | while ( 条件 ) 文
           | for ( 初期設定; 条件; 再設定 ) 文
           | repeat 文
           | repeat 文 until ( 条件 )
           | do 限界指定部 文
           | 数字の列 文
           | break
           | next
           | {プログラム}
           | その他

構造化プログラミングでおなじみの文が追加、または、使いやすいように、変更されています。 元々のFORTRANの文は、ほとんど、その他に分類されます。

では、簡単な例を挙げます。標準入力から、標準出力に書き出すcopyです。

# copy.r4 -- copy input characters to output
      character getc
      character c

      while (getc(c) != EOF)
         call putc(c)
      stop
      end

#はコメントの始まりです。"!="は、等しくない(オリジナルは、PL/IのNOT記号を使っていますが、 ASCIIキーボードにはないので、!で代用します)。

getc()は、標準入力から一文字読み込んでくる関数、putc()は、標準出力へ一文字書き出すサブルーチンです。

プログラムの内容は、標準入力から一文字ずつ読み込み、EOF文字がくるまで、標準出力へ一文字ずつ 書き出します。

これを、Watcom Fortrann 77で、書いてみましょう。

c copy.for --copy input characters to output
      program copy
      integer*1 getc
      integer*1 c

      while (getc(c) .ne. -1) do ! EOF(-1)
          call putc(c)
      end while
      stop
      end

Watcom Fortrann 77では、FORTRAN77を拡張してあり、while () do -- end whileが追加されています。 また、"!"は、コメントの始まりです。文字定数を扱えないので、EOFの値"-1"を直接プログラム中に書き込んでいます。

Watcom Fortrann 77には、character型がありますが、文字以外を扱うとコンパイルエラーになるので、 文字を扱うのにinteger*1型を使用しています。

いかがでしょうか。Watcom Fortrann 77は、文を拡張してあるので、メリットがあまりないように感じますが。 これから、RATFORでツールを作成し、最後にはRATFORプリプロセッサーを完成させます。すると、RATFORの ありがたみが、ご理解いただけるのではないでしょうか。