Summary of Fortran 77 to 90 converter

Fortran77の 古い形式で書かれたプログラムを使うことがある。しかし,実行がうまくいかなかったり,パラメーターを変えたりする必要もあり,結局は中身に手を付ける必要がある。このときに,古い形式だと苦労する。

今後のメンテナンスを楽にするために,Fortran 77 (F77) を90 (f90) に更新したい。手作業でやるとしんどいのでコンバーターを探した。Fortran 77から90への変換は以下が大事だ。

Fortran 77から90への変換時のポイント
  • 日本語対応
  • コメント文の開始文字C!への変換
  • do文の終わりのcontinueend doへの変換
  • 継続行の処理
  • インデント処理
  • 論理演算子の記号への変換

これを踏まえて既存のF77からf90へのコンバーターを調査した。合計7個のツールがみつかった。以下の表にまとめた。

f77からf90へ のコンバーター一覧
名前 言語 評価 日本語 コメント
fixcon Fortran 90 × 元ファイルの文字コードがutf-8でないと日本語は化ける。doのcontinueが消えない。
to_f90 Fortran 90 × × うまくいかないときがある。実行中にエラー。

F77_TO_F90
Fortran 90 × 実行途中でエラー。

convert
Fortran 90 × F77_TO_F90とほぼ同じ。動かない。

preconvert
Fortran 90 × ? 入力ファイルの拡張子を.forにしないといけない。動作しなかった。
fortran_tools Python 普通。doのcontinueが消えない。

f2f
perl かなりいい。オプションでインデントの幅を指定できる。

評価は○△×の3段階となっている。まともに動作したのは,fixcon,fixed2free,f2fの3個だった。 この中では,f2f.plが ダントツでよかった。f2f.plはperlで書かれている。最初に上げた条件をすべて満たしている。オプションもついており、使い勝手がよい。

もし,Fortranの ソースコードを新しいものにしたりリファクタリングしたければ,f2f.plを使うとよい。なお,f2f.plfortran_toolsの変換結果やコマンドの実行方法などをGitHubのリポジトリーに格納した。こちらもあわせて参照いただきたい。

f2f.plの使い方は以下の通りだ。

f2f.pl [inputfile [outputfile]]

具体的には,以下のように入力ファイル (FORTRAN.F) と出力ファイル (f2f.f90) をコマンド引数に指定して実行する。

./f2f.pl --tab 2 --base-indent 0 FORTRAN.F f2f.f90
perl f2f.pl --tab 2 --base-indent 0 FORTRAN.F f2f.f90

f2f.plはPerlプログラムである。内部の1行目にシバン (#!/usr/bin/perl) が指定されているため,UNIX系OSではファイル名で実行できる。シバンが無効なWIndowsなどではperlコマンドから実行することになる。

上記の例では,--tab--base-indentのオプションを指定している。--tabは行頭のインデント (スペース,タブ) を指定したスペースの個数の変換する (デフォルト4)。

--base-indentはインデントを指定する (デフォルト1)。FORTRAN 77コードは7列目から記述することになる。Fortran 90以降は自由形式であり,インデントは気にする必要がないため,--base-indent 0を指定して,インデントを解除したほうがよい。

ただし,GitHubのリポジトリーに記載した通り,f2f.plもわずかに意図しない変換がなされてしまう。この意図しない変換を承知で使う。あるいはこの程度であれば自作してもいいかもしれない。

参考

Summary of Fortran 77 to 90 converter” に対して1件のコメントがあります。

  1. きどころ より:

    コメント失礼致します。
    お手数お掛けしますがね使い方は以下の通りの箇所をもう少しだけ砕いて説明して下さいましたら有難いです。
    よろしくお願いいたします。

    1. senooken より:

      コメントありがとうございます。帰宅したら内容を修正しますのでお待ちください。

      時間が取れなければ、週末になるかもしれませんが、その際はご容赦ください。

      1. senooken より:

        対応が遅くなってしまい恐縮です。記事を更新しました。説明が不十分であれば,具体的にご指摘ください。

        その他,GitHub (https://github.com/senooken/example/tree/master/Fortran/f77tof90) に変換例を掲載しましたので,こちらも併せてご参照ください。

        また,このレベルの変換ツールの開発であれば,仕事としてお受けすることも可能ですので,よければご検討ください。

senooken にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です