C#コードの解析に使用できるパーサーはどれですか?
C#で使用できるC#パーサーを探しており、分析したコードの各アーティファクトに関する行とファイルの情報にアクセスできます。
C#コードの解析に使用できるパーサーはどれですか?
C#で使用できるC#パーサーを探しており、分析したコードの各アーティファクトに関する行とファイルの情報にアクセスできます。
回答:
ソースコードで動作します:
組み立て作業:
アセンブリの「解析」の問題は、行とファイルに関する情報が少ないことです(情報は.pdbファイルに基づいており、Pdbにはメソッドの行情報のみが含まれています)。
私は個人的にMono.CecilとNRefactoryをお勧めします。
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
CodeDomProvider.Parse()
メソッドを見てください。
ANTLRに慣れている場合は、Antlr C#文法を使用できます。
SharpDevelop AST APIを使用して、OWASP O2プラットフォームプロジェクトであなたが求めているもの(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#パーサーとCodeDOM
このライブラリは、コメントとフォーマット情報を保持し、変更して保存できるセマンティックオブジェクトモデルを生成します。また、LINQクエリを使用してソースコードを分析することもできます。
オープンソースIDEであるSharpDevelopには、ビジターベースのコードパーサーが付属しています。IDEとは独立して使用できます。
C#コードを直接解析するのではなく、ビルドされたバイナリでリフレクションを使用することを検討してください。リフレクションAPIは本当に使いやすく、おそらく必要なすべての情報を入手できますか?
見ていゴールドパーサー。非常に直感的なIUを使用して、インタラクティブに文法をテストし、C#コードを生成できます。それで利用可能な例がたくさんあり、それは完全に無料です。
たぶん、あなたはirony.codeplex.comでIronyを試すことができます。
これは非常に高速で、C#文法はすでに存在しています。
文法自体は、BNFのような方法でc#に直接記述されます(一部の演算子のオーバーロードにより実現)
それが一番良いのは、「文法」がASTを直接生成することです。
勢いを増し、仕事に非常に適したものはネメルレです
NDCの次の動画で、それがどのようにそれを解決できるかを確認できます。
C#ではありませんが、完全なASTを構築する完全なC#2/3/4パーサーは、DMS Software Reengineering Toolkitで利用できます。
DMSは、解析、ツリー構築、シンボルテーブルとフロー分析の構築、ソースからソースへの変換、および(変更された)ASTからのソースコードの再生成のための広大なインフラストラクチャを提供します。(C#以外の多くの言語も処理します。)
編集(9月)2013:この回答は最近更新されていません。DMSは長い間C#5.0を処理してきました