2012-01-25 4 views
4

C#Resharperは、古いプールforループをLINQの式に書き換えることを管理します。 C + +で同じことをやっているツールはありますか?それは、ループを書き換えてstlアルゴリズムを利用するのが妥当な場合です。C++ for-loopsをstl-algorithmに書き換えるツールはありますか?

+3

これは本当に良いことです。 – pmr

+3

ええと、私はビジネスアイデアを持っているかもしれません=) –

+0

C++は信頼性の高いツールとして解析するのが難しいです。 –

答えて

2

これを行うには、DMS Software Reengineering ToolkitとそのC++ Front EndのようなProgram Transformationシステムが必要です。

DMSはASTにコードを解析し、さまざまな分析を実行できるようにし、分析条件に合わせたソースからソースへの変換を適用し、変換されたASTからソースコードを再生成することができます。

コメントの一つでは、ロブは、SEZ:

私は置き換えツールのために解決したい

は(Tは::イテレータがc.beginを()=;それ< c.end()。 ++ it)x(* it)for(auto & t:c)x(t)である。 DMSで書くのはとても簡単です

rule robs_rule(T:IDENTIFIER, it:IDENTIFIER, 
       c:IDENTIFIER, x: IDENTIFIER) 
    :statement->statement 
= " for(\T::iterator \it = \c.begin(); \it < \c.end(); ++\it) \x(*\it)" 
    => "for(auto& \t : \c) \x(\t)"; 

ルールはテキストであるように見えるが、それは実際にはAST書き換えにASTの説明です。 DMS C++のフロントエンドで解析されます。その結果、マッチは信頼でき、文字列のハッキングに基づいていません。 (\ cがパターン内で2回起こるという事実は、両方が同じであることを強制する)。

実際には、気になるケースをカバーするためのルールがたくさんありますが、補助ステートメントで* \ it => \ itを適用するなど、より一般化したいと思うでしょう。また、さまざまな種類のフロー解析を利用して変換をサポートすることも有用です。この時点で、DMSは制御フロー分析を提供しますが、C++のデータフロー分析はまだ提供していません。

現在、これらの種類のタスクは可能ですが、必ずしもDMSで簡単に書き込むことはできません。これは大規模なC++アーキテクチャの再構成を実行するために使用されています。ウェブサイトの参考文献を確認してください。

+1

本当にクールです。 –

1

まあ、そのようなツールはありません(まだ)。その間はcppcheckを見ることができます。これはスタティックコード分析のためのツールです。それは一般的な面でかなり良い仕事をしますが、独自のルールセットを定義することもできます。これにより、実際にはC#Resharperソリューションの近くに来るかもしれません。

関連する問題