0

すべての「IF」に対応する「END-IF」があるかどうかを巨大なCOBOLファイルで見つけようとしています。私が知っているようにVisualStudio2008を使用すると、正規表現機能を備えた検索ツールがあります。(ただし、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

2 つではなく 1 つの一致が見つかりました。

また、このケースにどのように対処したいかを考えてください。

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

独自の言語変換ツールまたは COBOL lint ツールを作成しようとしている場合を除き、コンパイラが一致する END-IF を見つけたり、段落の終わりで閉じていない IF にフラグを立てたりすることに満足できると思います。

于 2012-04-30T15:53:19.303 に答える