C#コードの解析に使用できるパーサーはどれですか?
C#で使用できるC#パーサーを探しており、分析されたコードの各アーティファクトに関する行とファイルの情報にアクセスできます。
ソースコードで動作します。
組立作業:
アセンブリの「解析」の問題は、行とファイルに関する情報が少ないことです(情報は.pdbファイルに基づいており、Pdbにはメソッドの行情報のみが含まれています)
個人的にはMono.CecilとNRefactoryをお勧めします。
Mono (オープンソース)にはC#コンパイラー(およびもちろんパーサー)が含まれます
C#v3.5を.netアセンブリにコンパイルする場合:
var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
http://msdn.Microsoft.com/en-us/library/Microsoft.csharp.csharpcodeprovider.aspx
ANTLRに精通している場合は、 Antlr C#grammar を使用できます。
SharpDevelop AST APIsを使用して OWASP O2 Platform プロジェクトで、あなたが求めているもの(C#コードのAST解析)を実装しました。
消費しやすくするために、多数の主要なソースコード要素(ステートメント、型、メソッド、プロパティ、フィールド、コメントを使用)を公開し、元のC#コードをC#およびVBNETに書き換えることができるクイックAPIを作成しました。
このO2 XRuleスクリプトファイルで動作中のこのAPIを確認できます: ascx_View_SourceCode_AST.cs.o2 .
たとえば、これはC#ソースコードテキストを処理し、多数のTreeViewsおよびTextBoxesを設定する方法です。
public void updateView(string sourceCode)
{
var ast = new Ast_CSharp(sourceCode);
ast_TreeView.show_Ast(ast);
types_TreeView.show_List(ast.astDetails.Types, "Text");
usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
methods_TreeView.show_List(ast.astDetails.Methods,"Text");
fields_TreeView.show_List(ast.astDetails.Fields,"Text");
properties_TreeView.show_List(ast.astDetails.Properties,"Text");
comments_TreeView.show_List(ast.astDetails.Comments,"Text");
rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");
}
ascx_View_SourceCode_AST.cs.o2 の例は、ASTから収集した情報を使用して、ソースコードでタイプ、メソッド、コメント、等..
ここに参照用に書いたAPIコードがあります(これはSharpDevelopのC#ASTパーサーを使用する最初のパスであり、それがどのように動作するかまだ頭を悩ませています):
最近、C#4.0のすべての機能と新しい非同期機能を処理するC#パーサーをリリースしました: C#Parser and CodeDOM
このライブラリは、コメントとフォーマット情報を保持し、変更および保存できるセマンティックオブジェクトモデルを生成します。また、LINQクエリを使用してソースコードを分析することもできます。
SharpDevelop は、オープンソースIDEであり、ビジターベースのコードパーサーが付属しています。 IDEから独立して使用できます。
C#コードを直接解析するのではなく、ビルドされたバイナリでリフレクションを使用することを検討してください。リフレクションAPIは本当に使いやすく、おそらく必要なすべての情報を取得できますか?
Irony.codeplex.comでIronyを試すことができます。
非常に高速で、C#の文法が既に存在します。
文法自体はc#でBNFのような方法で直接記述されます(一部の演算子のオーバーロードで実現されます)
最も良いのは、「文法」がASTを直接生成することです。
Gold Parser をご覧ください。非常に直感的なIUにより、対話的に文法をテストし、C#コードを生成できます。それで利用可能な例がたくさんあり、それは完全に無料です。
勢いを得ており、仕事に非常に適しているのは、 Nemerle
nDCのこれらのビデオで、それをどのように解決できるかを見ることができます。
C#ではなく、完全なASTを構築する完全なC#2/3/4パーサーが DMS Software Reengineering Toolkit で利用可能です。
DMSは、解析、ツリー構築、シンボルテーブルとフロー解析の構築、ソースからソースへの変換、および(変更された)ASTからのソースコードの再生成のための広大なインフラストラクチャを提供します。 (C#以外の多くの言語も処理します。)
編集(2013年9月):この回答は最近更新されていません。 DMSは長い間C#5.0を扱ってきました