4

私の仕事は、制御フローグラフを作成することです。まず、コードを基本ブロックに分割することができました。たとえば、このプログラムは次のとおりです。

1 begin

2   int x, y, power;

3   float z;

4   input (x, y);

5   if (y<0)

6     power=-y;

7   else

8     power=y;

9   z=1;

10   while (power!=0){

11     z=z*x;

12   power=power-1;

13   }

14   if (y<0)

15     z=1/z;

16   output(z);

17 end

次の基本ブロックに変わります。

ブロック1

Line  2   int x, y, power;
Line  3   float z;
Line  4   input (x, y);
Line  5   if (y<0)

ブロック2

Line  6     power=-y;

ブロック3

Line  8     power=y;

ブロック4

Line  9   z=1;

ブロック5

Line 10   while (power!=0){

ブロック6

Line 11     z=z*x;
Line 12   power=power-1;

ブロック7

Line 14   if (y<0)

ブロック8

Line 15     z=1/z;

ブロック9

Line 16   output(z);

これを行うには、ファイルをスキャンし、PatternとMatcherを使用して、if、whileなどのステートメントに基づいてプログラムを分割します。基本ブロックはArrayListであり、これらのブロックはすべてArrayList>に保持されます。

次に、基本ブロックが相互に接続されているHashMapを保持しました。たとえば、ブロック1はifステートメントであるためブロック2とブロック3に接続されます(これが一方の方向に進む場合は、もう一方の方向に進みます)。このHashMapは、ブロック番号、および接続されているブロック番号のリスト用の>です。

つまり、基本ブロックと、これらの基本ブロック間の接続のリストがあります。今の私の問題は、これをグラフィカルな形式で表示する方法がわからないことです。以前は、paint()メソッドを使用して円と線を描画し、各ブロックが次のブロックへの接続を1つだけ持つ単純な制御グラフを表現していました。ただし、複数の接続がある場合にこれを行う方法がわかりません。これを行う簡単な方法はありますか?

ありがとう!

4

1 に答える 1

1

グラフを描画するために、私は通常dotを使用します。これは非常に簡単です。

于 2012-12-31T07:25:57.260 に答える