ホームページ >バックエンド開発 >C++ >セミコロンで終わる C の「for」および「while」ループを確実に検出するにはどうすればよいですか?

セミコロンで終わる C の「for」および「while」ループを確実に検出するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-15 18:09:10229ブラウズ

How Can I Reliably Detect C

セミコロンで終わる C の "for" および "while" ループの検出

セミコロンで終わる C の for または while ループの照合正規表現を使用した -colon は難しい場合があります。一般的なアプローチでは、バランスのとれた部分文字列に一致する名前付きグループを作成し、ループ本体全体が括弧内に含まれるようにします。

ただし、ループ本体に関数呼び出しが含まれる場合、この方法は失敗し、バランスが崩れます。非正規表現関数を使用した簡略化されたアプローチにより、この問題を解決できます。

ループ マッチングのカスタム関数

次のカスタム関数は、入力文字列を受け取り、for を検索します。または、while ループの後にセミコロンを続けます:

def find_loop_and_semicolon(string):
    pos = string.find('(') + 1
    open_br = 0
    while open_br >= 0:
        char = string[pos]
        if char == '(':
            open_br += 1
        elif char == ')':
            open_br -= 1
        pos += 1
    return pos if open_br == 0 and string[pos] == ';' else -1

関数:

  1. 位置カウンター pos をループの開始括弧の直前の位置に設定します。
  2. 開始括弧カウンターを初期化します open_br から 0.
  3. 文字列を反復処理して増分しますopen_br は開き括弧であり、閉じ括弧ではそれを減分します。
  4. open_br が 0 に戻ると、閉じ括弧の位置に達します。
  5. 次の位置の文字がセミコロンであるかどうかを確認してループを確認しますtermination.
  6. 両方の条件が満たされる場合、または -1 の場合は pos を返します。

使用法

string = "for (int i = 0; i < 10; doSomethingTo(i));"
result = find_loop_and_semicolon(string)
if result != -1:
    print("Loop found and terminated with a semi-colon.")
else:
    print("No matching loop found.")

利点

  • シンプルさ: 機能が分かりやすく、 implement.
  • 柔軟性: 関数呼び出しを含む複雑な本体を持つループを処理します。
  • 正規表現オーバーヘッドなし: 潜在的なオーバーヘッドと複雑さを回避します。正規表現。

以上がセミコロンで終わる C の「for」および「while」ループを確実に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。