2009-08-04 14 views
1

私はリバースエンジニアリングの学校プロジェクトに取り組んでいます。これは、コンパイルされたC#プロジェクトのASTを翻訳する必要があります。 私は「C#コードをASTに変換する」という記事を見ました。このウェブサイトでは、私が探しているもののようには見えません。 私が知っていたことによると、現在C#ではJavaのようなsthのライブラリクラスは提供されていません:http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/dom/ast/ASTVisitor.html C#にこのようなライブラリクラスがある場合は、ここのすべてが解決されます。C#ASTの操作方法は?

私は誰かに相談しており、可能な解決策があります。 しかし私は解決策に取り組むことにも問題があります。 1)ASTが操作のために公開されるライブラリを提供する別のコンパイラを検索します。しかし、私はそれのようなコンパイラを見つけることができません。 2)ANTLR Parser Generatorを使用して、それを行う独自のコンパイラを作成します(これははるかに難しく長いプロセスになります)。そこにダウンロードされるのはC#ではなく、さまざまな言語のサンプル文法です(C#を含むさまざまな言語で書かれた文法がありますが、C#文法は生成されません)。したがって、問題は私がC#文法を見つけることができないということです。

この問題を解決する最短かつ最速の方法は何ですか?私が本当に上記の選択肢の1つを取っているなら、どのように私が直面した問題を解決するためにabtに行くべきですか?

あなたが私の問題解決の手助けをすることができれば、非常に感謝しますか?

+0

私はあなたがC#を使用してC#ののASTを操作したいかどうかは不明だか、単にまったくのツールを使用してのASTを操作します。 ANTLRについてのあなたの発言は混乱しています。ANTLRがC#ツリーを解析して構築するために処理できるC#3.0の文法があると思いました。 –

答えて

0

ANTLRは良い選択ではありません。私は今Mono Cecilを使って試しています。 Mono CecilはCommon Intermediate Language(CIL)にコンパイルできるソースコードを分析するのに適しています。欠点は、適切な文書がないことです。

0

なぜあなたは試してみませんかNRefectory私はそれがいくつかSharepDevelopフォーラムでASTの事について議論して見たことがあります。

ここは、このトピックに関するCodeProjectに関する記事です。

0

完全なC#3.0パーサーはDMS Software Reengineering Toolkit(略してDMS)で利用できます。数万のC#ファイルを正確に処理するために使用されています。自動AST構築、ツリーのトラバーサル、 サーフェス構文パターンのマッチングと変換、さらに多くの機能を提供します。 商品としては、学生プロジェクトではうまくいかない場合があります。

ANTLRは確かにC#パーサーを提供していますが、完全または堅牢なことはわかりませんが、 、または実際にASTをビルドするかどうかはわかりません。

[EDIT 2010年1月25日:上記のすべてのプロパティを持つDMSのために利用可能になりましC#4.0のパーサー]

[EDIT 2016年5月:DMSために利用可能なC#6.0のパーサー]

+0

もっと明確にするには:私はC#プロジェクトでC#ファイルやディレクトリを解析できるsthをやりたかったので、ASTを構築して操作できるようになりました。 C#コードをUMLにリバースエンジニアリングする操作。 – yeeen

+0

UMLにはさまざまなサブモデルがあります。シンボルテーブルを持つ解析木からクラス図を作成するのは簡単です。状態図を作成するのはかなり難しいでしょう。私たちは、DMSを使ってJavaソースコードをOMG Executable UMLに処理した経験がありますが、これはややこしいことでした。フルコントロールとデータフロー分析が必要でした。 DMSの場合を除いて、後者のいずれもANTLRまたは私が知っている一般的な解析システムでは利用できません。 YMMV。 –

+0

DMS - ドキュメント管理システム? YMMV - ??? とにかく、私はUMLクラス図にリバースエンジニアリングする必要があります。私は現在、ANTLRで作業しています.ASTを操作するために使用できる唯一の方法だと思われます。後でクラス階層分析アプローチを使用して、データベースに格納されるはずのUMLに変換する必要があります。将来のUMLパーツの指示を待つ必要があります。私はここに別のqnを投稿しました: "http://stackoverflow.com/questions/1291153/building-own-c-compiler-using-antlr-compilation-unit"。まだそれに取り組んでいます。たぶんあなたに指針を与えることができます。 – yeeen

3

にAPIを実装するソリューションに答えました。しかし、私は似たような質問をしていました。私は、SharpDevelopの一部として出荷されるNRefactoryライブラリを少し調べました。 はC#コードからASTを生成します。

ここSDソースコードの一部であるNRefactoryデモアプリケーションのイメージです。いくつかのC#コードを入力し、ASTを生成してツリービューに表示します。

alt text