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