0

如果所有“IF”都有相应的“END-IF”,我试图在一个巨大的 COBOL 文件中查找。据我所知,使用 Visual Studio 2008 它有一个带有正则表达式功能的搜索工具。(不过,在阅读了 Jeff Atwood 的文章后,我知道 Visual Studio 中的正则表达式与真正的交易不太一样。)

无论如何,我想出了这个表达:

<(IF)#(.*\n*)#END-IF\n

这似乎溢出了堆栈,非常不方便(见下图)。所以我想知道,是否有可能在 VS 中进行这种搜索?如果是的话,正则表达式会是什么样子?

-->我想知道是否所有的“IF”都有一个结束的“END-IF”

谢谢。

VS2008中正则表达式搜索期间的堆栈溢出

4

1 回答 1

2

您在这里遇到的是尝试使用正则表达式执行递归解析的情况,通常这会给您带来麻烦。当我读到它时(当然,我不熟悉 Visual Studio 在这里使用的风格),您的正则表达式会尝试匹配尽可能多的行,直到它找到一个 END-IF——包括匹配另一个 END-IF。换句话说,当呈现

IF condition-1
    statement-1
END-IF
IF condition-2
    statement-2
END-IF

找到一个匹配项,而不是两个。

另外,想想你想如何处理这种情况:

IF condition-1
    IF condition-2
        statement-1
    END-IF
END-IF

除非您尝试编写自己的语言翻译器或 COBOL lint 工具,否则我认为您可以满足于编译器会找到匹配的 END-IF,或者在段落末尾标记未闭合的 IF。

于 2012-04-30T15:53:19.303 回答