103

C# コードの解析に使用できるパーサーはどれですか?

C# で使用でき、分析されたコードの各アーティファクトに関する行とファイルの情報にアクセスできる C# パーサーを探しています。

4

15 に答える 15

119

ソースコードで動作:

アセンブリで動作します:

アセンブリの「解析」の問題は、行とファイルに関する情報が少ないことです (情報は .pdb ファイルに基づいており、Pdb にはメソッドの行情報のみが含まれています)。

個人的にMono.CecilNRefactoryをお勧めします。

于 2008-09-17T09:21:39.570 に答える
7

Mono (オープンソース) には C# コンパイラ (そしてもちろんパーサー) が含まれています

于 2008-09-17T09:22:25.683 に答える
6

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

于 2010-03-09T11:38:23.843 に答える
5

ANTLR に精通している場合は、Antlr C# grammarを使用できます。

于 2010-10-13T01:33:22.790 に答える
4

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 パーサーを使用する最初のパスであり、それがどのように機能するかについてまだ頭を悩ませていることに注意してください)。

于 2010-02-06T21:28:34.557 に答える
3

MS はここでApache 2 ライセンスを使用してコードを公開したばかり (またはまもなく公開する予定) であるため、Roslyn をぜひチェックしてください。GitHubのこのコードを使用して、この情報を解析する方法を確認することもできます。

于 2014-04-15T02:38:52.977 に答える
3

最近、すべての C# 4.0 機能と新しい非同期機能を処理する C# パーサーをリリースしました: C# パーサーと CodeDOM

このライブラリは、コメントとフォーマット情報を保持し、変更および保存できるセマンティック オブジェクト モデルを生成します。また、ソース コードを分析するための LINQ クエリの使用もサポートしています。

于 2011-10-03T05:50:27.047 に答える
2

たぶん、irony.codeplex.comでIronyを試すことができます。

これは非常に高速で、ac#文法はすでに存在します。

文法自体は、BNFのような方法でC#に直接書き込まれます(一部の演算子のオーバーロードで実現されます)

それで最も良いことは、「文法」がASTを直接生成することです。

于 2010-12-30T09:39:40.637 に答える
2

Gold Parserを見てください。文法をインタラクティブにテストし、C# コードを生成できる非常に直感的な IU を備えています。それにはたくさんの例があり、完全に無料です。

于 2008-10-23T19:20:47.493 に答える
2

オープン ソース IDE であるSharpDevelopには、非常にうまく機能するビジター ベースのコード パーサーが付属しています。IDE とは独立して使用できます。

于 2008-09-17T09:22:47.197 に答える
2

http://www.codeplex.com/csparser

于 2008-09-17T09:19:40.853 に答える
2

C# コードを直接解析する代わりに、ビルドされたバイナリでリフレクションを使用することを検討してください。リフレクション API は非常に使いやすく、必要な情報をすべて取得できるのではないでしょうか?

于 2008-09-17T09:32:00.997 に答える
0

勢いを増していて、仕事に非常に適しているものはNemerleです

あなたはそれがNDCからのこれらのビデオでそれをどのように解決できるかを見ることができます:

于 2012-07-17T13:19:06.263 に答える
0

C# ではありませんが、完全な AST を構築する完全な C# 2/3/4 パーサーは、DMS Software Reengineering Toolkitで利用できます。

DMS は、構文解析、ツリー構築、シンボル テーブルの構築とフロー分析、ソースからソースへの変換、および (変更された) AST からのソース コードの再生成のための広大なインフラストラクチャを提供します。(C# 以外の多くの言語も処理します。)

編集 (9 月) 2013: この回答は最近更新されていません。DMS は長い間 C# 5.0 を扱ってきました

于 2010-03-09T11:21:29.253 に答える
-2

GPPGは、独自のパーサーを作成する意思がある場合に役立つ可能性があります (これは楽しいことです)。

于 2008-10-09T06:26:05.177 に答える