VS ++アドオンからVC ++コードDOMにアクセスできますか?


100

Visual Studio IntelliSense for VC ++には、「完全な」EDG C ++パーサーが含まれています(Intelなどでも使用されています)。C#コードDOMはアドオンにアクセスできるので(間違っている場合は修正してください)、C ++コードDOMにもアクセスできますか?これを使用して、VS環境内で開いているVC ++プロジェクトを分析できますか?


25
ちょうどあなたの他のスレッドから来た。これは良い質問です。
Qix-モニカは2014

81
繰り返しますが、「何を求めているのか不明確ですか?」- 本当に人々?「この質問の前提について何も知りません」というのは、「何を求めているのか不明確」という意味ではありません。
Tim Post

9
@Dave-MS以外の従業員でもこの問題を解決できることを証明するための回答を追加しました。僕がやりたいことに近いことをした人がいます。
TheFlash

55
@DaveHillier話題の場合は、ここで完全に歓迎します。それ以上の議論はありません。「ここで誰でもこれに答えることはできますか?」その後、我々は急速に粘着性の不安のこのようなアプローチは何が難しい潜在的unanswerableです。実際に回答の質問を開かない限り、正直なところ、が回答できるかについて具体的な考えはありません。それがそもそも求めていることの核心です。
Tim Post

49
@bmargulies この質問は、単に存在することによって何の害がありますか?それはトピックに関するものであり、興味深いものであり、おそらく誰かそれに答えることができます。ヘック、誰かからの MSは、これを見ると、それに答える、そしてそれは、サイトには絶好のに加えだかもしれません。肯定的なものを見る前に、質問について否定的なものを探すのをやめてください。
Tim Post

回答:


22

Visual C ++リファクタリングの拡張子は、プロジェクト全体のメンバーの名前を変更することができます。それはMSによって構築されましたが、明らかに内部コードDOMを使用してこれを実現しました。ですから、それは可能です。まだ方法がわかりません。

CppListerの拡張は、クラス内のさまざまなメンバーを一覧表示するVSによって作成されたインテリセンスデータベースを読み取ることができます。

いつでもオープンソースのClang C ++パーサー(実際にはコンパイラー)を使用して、ASTをC#オブジェクトモデルに読み込むことができます。ClangへのC#バインディングについては、CppSharpおよびClangSharpを参照してください。


8

「C ++コードDOM」が存在するかどうかはわかりません。重要なのは、MSVSがEDGフロントエンドを使用して、MSVS IDEアクションをサポートするためにシンボルの意味を解析および決定することです。EDG IIRCは、プログラムを表す独自の内部データ構造を構築します。これらのデータ構造が「C ++コードDOM」であると信じる理由はありません。あるいは、それらがあなたに見えるか、MSDNでそれらについて知ることができるでしょう。

あなたの本当の問題は、C ++ソースコードを分析することです。EDGのフロントエンド情報があることは、そのための大きな助けになると私は同意します。あなた 本当にあなた自身のC ++パーサーを書こうとすることを本当に望んでいません(そしてあなたは構文解析の前にたくさんのものを必要とします、「構文解析後の人生」に関する私のエッセイをググってください)。

したがって、次の選択肢があります。

  • MSVSでEDG機械への扉を見つけます。幸運があまりなく、これが利用可能であるとMSから文書化されていないように見えるので、おそらくこの方法では幸運はあまりありません。私がMSの立場にあれば、それを公開することはありません。それはまた別のサポートの頭痛の種であり、彼らのものでさえないソフトウェアの一部であるでしょう。
  • 直接、商用EDGフロントエンドを使用してくださいEDG。私の理解では、無料で個人使用ライセンスを提供しています。(私の理解は間違っているかもしれません)。このようにして、MSがアクセスに対して持つ可能性がある制限をスキップします... EDGフロントエンドを自分で構成する必要がある代償を払って。欠点:EDGは、アナライザーのフロントエンドではなく、コンパイラーのフロントエンドになりたいと考えています。その区別は微妙に思えるかもしれませんが、おそらくあなたを噛みます。たとえば、EDGはコメントを破棄すると思います。コンパイラのフロントエンドはそれらを必要としません。アナライザーでコメントを検査する場合は、これが実際の問題である可能性があります。
  • Clangを使用します。これはオープンソースのC ++パーサーであり、さまざまなプログラム分析の目的やC ++コンパイラのフロントエンドに使用するように設計されています。私はこれについての経験はありませんが、かなりよく考えられているようで、多くの設備を提供しているようです。C ++のMS方言を特別にサポートしているかどうかはわかりません。
  • 別の商用フロントエンドである(DMS)C ++フロントエンドを使用する。これのアーキテクトである私は、それがよく考えられていると確信しています(MS Visual C ++のサポートを含む)。これを使用して複雑なC ++分析および変換タスクを実行する特定の経験があります。EDGとは異なり、これは分析、変換、および生成をサポートするように設計されています(たとえば、コメントをキャプチャし、リテラルの基数さえキャプチャして、正しく再生成できるようにします)。基盤であるDMSには、カスタム分析をサポートするための多くの機械が組み込まれています:ASTおよびシンボルテーブルの構築、属性文法、データフローフレームワーク、ASTレベルでの手続き内制御およびデータフロー分析、BDD管理、ソースパターンの一致、ソースから-ソース変換。ClangとEDGは、ASTおよびシンボルテーブルの構築を提供します。Clang(ただし、EDGとは思わない)にはフロー分析(LLVMレベル)があります。ただし、ASTレベルのフロー解析(AFAIK)ではありません。ClangもEDGもソースパターン/変換機能を提供しないため、長期的なタスクに依存します。他のオプションと比較して、C ++のフロントエンドはオープンソースでも無料でもありません。研究ライセンスを取得できます。

2
「DOM」は基本的にASTのHTML版です。ただし、C ++コンパイラは通常、わずかに異なる構文を使用しますが、正規の構文があることを前提としています。(たとえば、より適切なエラーメッセージを作成するため)。
MSalters 2014

3
C#のDOMは、コード生成に使用される「解像度の低いAST」を意味します。C#domが提供する種類の解像度でC ++プログラムを現実的に分析することはできません。
Ira Baxter 2014

参照inevitablesoftware.com/Products.aspx何が良いのC#のCodeDOMの提供のために
TheFlash

@Geotarget:そして、C#Domは質問とどのように関係していますか?
Ira Baxter

@IraBaxter-私が「コードDOM」と言ったときに私が探しているもの-多くの人々は、コードDOMが何であるか理解していないか、JS HTML DOMと混同しているとコメントしています。もちろん、私はC ++のエキスパートではないので(前述したように)、C ++コードDOMで何が必要になるかわかりませんが、Inevitablesoftwareは非常にシンプルで使いやすいコードDOMを提供していることを理解しています。同様のAPIを備えたC ++コードDOMを探しています。
TheFlash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.