struct コマンド

目的

FORTRAN プログラムを RATFOR プログラムに変換します。

構文

struct [ -s ] [ -i ] [ -a ] [ -b ] [ -n ] [ -tNumber ] [ -cNumber ] [ -eNumber ] [ File ]

説明

struct コマンドは、 File (デフォルトは標準入力) で指定された FORTRAN プログラムを RATFOR プログラムに変換します。 RATFOR 制御構造は、可能な場合には必ず、オリジナルの FORTRAN を置き換えます。 ステートメント番号は、必要な場合だけ表示されます。 ホレリス文字定数を引用符で囲まれた文字列に変更すること、および関係演算子を記号に (例えば、.GT.>) 変更することなどの外見上の変更が行われます。 出力は適切に字下げされます。

struct コマンドは、FORTRAN 66 の構文を理解しますが、FORTRAN 77 は完全には理解しません。 入力の FORTRAN プログラムに RATFOR の予約語である ID が含まれている場合には、そのプログラムを構造化しても、有効な RATFOR プログラムにはなりません。 生成されるラベルが 32767 個を超えることはできません。 ターゲットを指定しないで goto ステートメントを取得する場合は、 -e フラグを使用してみてください。

フラグ

項目 説明
-a else-if ステートメントのシーケンスを、以下のような非 RATFOR スイッチに変換します。
switch
{   case pred1: code
    case pred2: code
    case pred3: code
    default: code
         }

case 述部が順番に検査されます。 1 つだけの case に適したコードが実行されます。 switch ステートメントのこの一般化形式は、RATFOR にはありません。

-b マルチレベルの break ステートメントの代わりに、goto ステートメントを生成します。
-c Number 非ゼロの整数 Number によって、出力プログラムの逐次的ラベルを増大します。 デフォルトは 1 です。-cNumber の間にスペースを入れないでください。
-e Number Number が 0 (デフォルト) のときに、ループの反復に導くことができる場合のみ、ループ内にコードを入れます。 -eNumber の間にスペースを入れないでください。
-i 演算された goto ステートメントをスイッチに変換しません。 (RATFOR はスイッチを演算された goto ステートメントに戻しません。)
-n マルチレベルの next ステートメントの代わりに、goto ステートメントを生成します。
-s 標準フォーマットで入力を受け入れます。 コメントはカラム 1 の cC、または * によって指定され、継続行は、カラム 6 の非ゼロ、非ブランク文字によって指定されます。入力は、f77 コマンドが受け入れる形式で行われます。
-t Number 非ゼロの整数 Number を、出力プログラムで最低の値のラベルにします。 デフォルトは 10 です。 -tNumber の間にスペースを入れないでください。

Number がゼロでなければ、小さなコード・セグメントがグループに入るのを許可します。 ゼロであれば、ループ・セグメントを含むいくつかの場所への出口があり、そのループからしかセグメントに到達できません。 この場合、小さいというのは、コード・セグメント内のステートメントの数に近いが、等しくはない程度を意味します。 Number の値には、10 未満を使用することをお勧めします。

FORTRAN プログラム test.f を RATFOR プログラム newtest.ratfor に変換するには、以下のように入力します。

struct -s -i -n -t2 test.f > newtest.ratfor

ファイル

項目 説明
/tmp/struct* struct コマンドの処理中に使用される一時ファイル。
/usr/lib/struct/structure struct コマンドの処理を取り扱うファイル。
/usr/lib/struct/beautify struct コマンドの処理を取り扱うファイル。
/usr/ucb/struct struct コマンドが入っています。