2

プロジェクトの一環として、forC/C++ 構文で指定されたループの領域を検出するコードを開発しようとしています。しかし、これは見た目よりもはるかに複雑です。パーサーは、指定された{、1 つのステートメントforループ、1 つのステートメントif-elseコントロールなどを処理する必要があります。

C/C++ コードを完全にブラケット化するための安定したツール (GNU が望ましい) があるのだろうか?

前もって感謝します!

さらに詳しい情報

完全に括弧で囲まれているということは、ループの範囲を{andでマークすることを意味し}ます。

例:

入力:

  for (i = 0; i < 10; i++)
    if (i % 2)
      j++;
    else
      j--;

出力:

  for (i = 0; i < 10; i++){
    if (i % 2){
      j++;
    }else{
      j--;
    }
  }
4

2 に答える 2

1

pycparserで解決策を見つけることができました。visit_forで定義された関数を変更するだけで十分pycparser/c_generator.pyです。次に、組み込みの pycparser の例 ( example/c-to-c.py) を実行すると、C コードから完全に括弧で囲まれた for ループが得られます。

今後の参考のために、変更は次のとおりです。

pycparser で、次のvisit_for宣言を変更pycparser/c_generator.pyします。

def visit_For(self, n):
    s = 'for ('
    if n.init: s += self.visit(n.init)
    s += ';'
    if n.cond: s += ' ' + self.visit(n.cond)
    s += ';'
    if n.next: s += ' ' + self.visit(n.next)
    s += ')\n'
    s += self._generate_stmt(n.stmt, add_indent=True)
    return s

{その前後self._generate_...に追加}します。

于 2013-03-17T07:53:37.873 に答える
0

uncrustifyを使用して優れた結果を得ました

特徴

  • 識別コード、かっこ、代入などの位置合わせ
  • '=' と変数定義を揃える
  • 構造初期化子を揃える
  • アライン #define もの
  • バックスラッシュと改行を揃える
  • コメントの再フォーマット (少し)
  • 文字間のスペースを修正
  • return ステートメントで括弧を追加または削除する
  • 単一ステートメントの if/do/while/for ステートメントで中かっこを追加または削除する
  • 埋め込み SQL 'EXEC SQL' をサポート
  • 高度に設定可能 - バージョン 0.60 の時点で 454 の設定可能なオプション
于 2013-03-17T08:07:50.473 に答える