Summary of Fortran 77 to 90 converter
Fortran77の 古い形式で書かれたプログラムを使うことがある。しかし,実行がうまくいかなかったり,パラメーターを変えたりする必要もあり,結局は中身に手を付ける必要がある。このときに,古い形式だと苦労する。
今後のメンテナンスを楽にするために,Fortran 77 (F77) を90 (f90) に更新したい。手作業でやるとしんどいのでコンバーターを探した。Fortran 77から90への変換は以下が大事だ。
- 日本語対応
-
コメント文の開始文字
C
の!
への変換 -
do文の終わりの
continue
のend do
への変換 - 継続行の処理
- インデント処理
- 論理演算子の記号への変換
これを踏まえて既存のF77からf90へのコンバーターを調査した。合計7個のツールがみつかった。以下の表にまとめた。
名前 | 言語 | 評価 | 日本語 | コメント |
---|---|---|---|---|
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.pl
とfortran_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
もわずかに意図しない変換がなされてしまう。この意図しない変換を承知で使う。あるいはこの程度であれば自作してもいいかもしれない。
コメント失礼致します。
お手数お掛けしますがね使い方は以下の通りの箇所をもう少しだけ砕いて説明して下さいましたら有難いです。
よろしくお願いいたします。
コメントありがとうございます。帰宅したら内容を修正しますのでお待ちください。
時間が取れなければ、週末になるかもしれませんが、その際はご容赦ください。
対応が遅くなってしまい恐縮です。記事を更新しました。説明が不十分であれば,具体的にご指摘ください。
その他,GitHub (https://github.com/senooken/example/tree/master/Fortran/f77tof90) に変換例を掲載しましたので,こちらも併せてご参照ください。
また,このレベルの変換ツールの開発であれば,仕事としてお受けすることも可能ですので,よければご検討ください。