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 API を使用して、 OWASP O2 プラットフォームプロジェクトで、あなたが求めているもの (C# コードの AST 解析) を実装しました。
簡単に使用できるようにするために、(ステートメント、型、メソッド、プロパティ、フィールド、コメントを使用して) いくつかの主要なソース コード要素を公開し、元の C# コードを C# および VBNET に書き直すことができる簡単な API を作成しました。 .
この O2 XRule スクリプト ファイルascx_View_SourceCode_AST.cs.o2で、この API の動作を確認できます。
たとえば、これは C# ソース コード テキストを処理し、多数の TreeView と TextBox を設定する方法です。
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# パーサーと CodeDOM
このライブラリは、コメントとフォーマット情報を保持し、変更および保存できるセマンティック オブジェクト モデルを生成します。また、ソース コードを分析するための LINQ クエリの使用もサポートしています。
たぶん、irony.codeplex.comでIronyを試すことができます。
これは非常に高速で、ac#文法はすでに存在します。
文法自体は、BNFのような方法でC#に直接書き込まれます(一部の演算子のオーバーロードで実現されます)
それで最も良いことは、「文法」がASTを直接生成することです。
Gold Parserを見てください。文法をインタラクティブにテストし、C# コードを生成できる非常に直感的な IU を備えています。それにはたくさんの例があり、完全に無料です。
オープン ソース IDE であるSharpDevelopには、非常にうまく機能するビジター ベースのコード パーサーが付属しています。IDE とは独立して使用できます。
C# コードを直接解析する代わりに、ビルドされたバイナリでリフレクションを使用することを検討してください。リフレクション API は非常に使いやすく、必要な情報をすべて取得できるのではないでしょうか?
勢いを増していて、仕事に非常に適しているものはNemerleです
あなたはそれがNDCからのこれらのビデオでそれをどのように解決できるかを見ることができます:
C# ではありませんが、完全な AST を構築する完全な C# 2/3/4 パーサーは、DMS Software Reengineering Toolkitで利用できます。
DMS は、構文解析、ツリー構築、シンボル テーブルの構築とフロー分析、ソースからソースへの変換、および (変更された) AST からのソース コードの再生成のための広大なインフラストラクチャを提供します。(C# 以外の多くの言語も処理します。)
編集 (9 月) 2013: この回答は最近更新されていません。DMS は長い間 C# 5.0 を扱ってきました
GPPGは、独自のパーサーを作成する意思がある場合に役立つ可能性があります (これは楽しいことです)。