-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条件 2内,即在条件 1内。
  2. code_line 7条件 1内。
  3. code_line 14条件 7内部,在条件 2内部,在条件 1内部。

if-else 块可以无限次嵌套。

4

1 回答 1

1

首先,为您的语言构建或查找解析器。然后,解析您的语言,创建一个抽象语法树。对于您的示例,它可能如下所示:

在此处输入图像描述

在树中,找到您要调查的代码。从那个节点开始,沿着树向上走,直到到达根节点。每次传递一个 IF 节点时,获取该节点的条件并打印它。

例如,您为code_line 14行走的路径如下所示:

在此处输入图像描述

在行走时,您会遇到条件 7、2 和 1。

于 2012-09-18T12:40:49.807 回答