2016-08-25 4 views
1

非常に大きなFortranレガシーコード(fortran77)を変更しようとしていますが、コードの作成者はコメントを書く気にはならず、適切なインデントなど、私はコードを変更することに大きな困難を抱えています。私が必要とするのは、起動時の場所を表示すると、if-thendo-enddoのような指定された構文の終わりを識別できるようにする方法(パッケージまたはコマンドラインツール)です。たとえば:長いFortranコードでif-endifおよびdo-enddo構文を識別する

if(x .eq. 0)then 
    if (y .eq. 0)then 
    print*, y 

    endif 
endif 

は、私は文が終了した場合は最初んが、このツールはように私の最後の行を表示しなければならない場所を確認するとします。

私は非常に助けに感謝します。前もって感謝します。

http://www.polyhedron.com/pf-plusfort0html

https://sourceforge.net/projects/findent/files/

他のFORTRANのファイルをインデントするために(自分で)小さなコードを実行することです。

答えて

2

は、ここであなたがやりたいことには、2つのotionsです。それは難しいことではありません:)

+0

findent is great!どうもありがとう。 – Peaceful

0

砦では、次のようにラベリング構築物は、(それはF90で、標準のかもしれない)があります:IF文が通常座る場所

Cat_Loop: 
&DO I = 1, N 
    !<stuff> 
    Dog_Loop: DO K = 1, M, 9 !Because Dogs are canines! 
    !<stuff> 
    Lizard_Loop: 
& DO J = 1, M 
    !<stuff> 

    ENNDO Lizard_Loop 
    ENNDO Dog_Loop 
ENDDO Cat_Loop 

SELECTED CASEは時に便利です。私はどうなる

SELECTED CASE (Dog) 
    CASE(-9) 
    <Stuff> 
    !ENDCASE 
    CASE(1) 
    <Stuff> 
    !ENDCASE 
    CASE(2) 
    <Stuff> 
    !ENDCASE 
    CASE(9) 
    <Stuff> 
    ENDCASE 
    DEFAULT 
    WRITE(*,*)' Why am I here with Dog=',Dog 
    ENDCASE 
END SELECT 

非常に最初のものは、既知の入力のためのいくつかの出力をキャプチャし、「ユニットテスト」それにいくつかの方法を構築することです:これは、別の90の標準です。 そして、あなたが以前にあった経路に固執していることを定期的に確認してください。

-1

自分自身をFortran 90に制限する特別な理由はありますか。それは約30年前です。現代Fortranでは、制御構造の識別子を使用できます。は、doループに限定されなくなりました。gotoは、Fortran 2008 block構成を使用することで、最終的に推奨されなくなりました。

alpha: block 
    bravo: do i = 1, num_in_set 
     charlie: if (x == a(i)) then 
      delta: select case (i) 
       case (FIRST) 
        call do_something(x) 
       case (SECOND) 
        call do_something_else(x) 
       case (THIRD) 
        cycle bravo 
       case default 
        exit alpha 
      end select delta 
     else if (x == a(i+1)) then 
      x = foo(a) 
     else 
      x = bar(a) 
      exit alpha 
     end if charlie 
     call finally_do_something(x) 
    end do bravo 
end block alpha 
+0

私はあなたの言葉で "レガシーコード"という言葉を読まなかったと思います。 – Peaceful

+0

@SnehalShekatkar私は、あなたが現代の慣習に従うためにレガシーコードをリファクタリングすることに興味があると思った。古いコードと新しいコードを変更せずに混在させることができます。現代のFortranは主に下位互換性があります。つまり、FORTRAN 77標準準拠のコードは、浮動小数点インデックス付きの 'assign'、' do'ループ、 'pause'などのほとんど使用されない削除された機能を含まないFortran 2015調整可能です。 'H '編集記述子など – jlokimlin

関連する問題