[c#] C # 용 파서

C # 코드를 구문 분석하는 데 사용할 수있는 파서는 무엇입니까?

C #에서 사용할 수 있고 분석 된 코드의 각 아티팩트에 대한 줄 및 파일 정보에 액세스 할 수있는 C # 파서를 찾고 있습니다.



답변

소스 코드에서 작동 :

조립 작업 :

어셈블리 “파싱”의 문제는 줄과 파일에 대한 정보가 적다는 것입니다 (정보는 .pdb 파일을 기반으로하고 Pdb에는 메서드에 대한 줄 정보 만 포함됨).

Mono.CecilNRefactory를 개인적으로 추천 합니다.


답변

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 스크립트 파일에 대한 조치에서이 API를 볼 수 있습니다 ascx_View_SourceCode_AST.cs.o2를 .

예를 들어 다음은 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 # 파서 및 CodeDOM 을 처리하는 C # 파서를 출시했습니다.

이 라이브러리는 주석 및 서식 정보를 유지하고 수정 및 저장할 수있는 의미 객체 모델을 생성합니다. 또한 LINQ 쿼리를 사용하여 소스 코드를 분석 할 수 있습니다.


답변