-3

以下に示すような分岐コードがあるとします。

if condition 1
    code_line 1
    code_line 2
    more lines...
    if condition 2
        code_line 3
        code_line 4
        if condition 7   
            code_line 13
            code_line 14
        end if
        more lines...
    end if

    if condition 5
        code_line 6
        code_line 10
        more lines...
    end if
else
    code_line 7
    more lines...
end if

このコードを読み取って、特定の行のすべての前提条件を教えてくれるメソッドが必要です。

例:

  1. code_line 4は、 condition 1の内側にあるcondition 2の内側にあります。
  2. code_line 7condition 1内にあります。
  3. code_line 14は、condition 1の内側にあるcondition 2の内側にあるcondition 7の内側にあります。

if-else ブロックは、無制限にネストできます。

4

1 に答える 1

1

まず、言語用のパーサーを構築または検索します。次に、言語を解析して、抽象構文ツリーを作成します。あなたの例では、次のようになります。

ここに画像の説明を入力

ツリー内で、調査するコードを見つけます。そのノードから始めて、ルート ノードに到達するまでツリーを上っていきます。IF ノードを渡すたびに、そのノードの条件を取得して出力します。

たとえば、code_line 14のパスは次のようになります。

ここに画像の説明を入力

歩いていると、条件 7、2、および 1 に遭遇します。

于 2012-09-18T12:40:49.807 に答える