it-swarm-ko.tech

C # 파서

C # 코드를 구문 분석 할 수있는 구문 분석기는 무엇입니까?

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

99
Julien Hoarau

소스 코드에서 작동합니다 :

조립 작업 :

어셈블리 "구문 분석"의 문제점은 라인과 파일에 대한 정보가 적다는 것입니다 (정보는 .pdb 파일을 기반으로하고 Pdb는 메소드에 대해서만 라인 정보를 포함합니다)

개인적으로 Mono.Cecil NRefactory 를 권장합니다.

116
Julien Hoarau

Mono (오픈 소스)는 C # 컴파일러를 포함합니다 (물론 파서).

7
aku

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

6
zproxy

ANTLR에 익숙하면 Antlr C # grammar 를 사용할 수 있습니다.

5
prosseek

SharpDevelop AST API를 사용하여 OWASP O2 Platform 프로젝트에서 요청한 것 (C # 코드의 AST 파싱)을 구현했습니다.

더 쉽게 사용할 수 있도록 여러 주요 소스 코드 요소 (문, 유형, 메서드, 속성, 필드, 주석 사용)를 노출하고 원래 C # 코드를 C # 및 VBNET으로 다시 작성할 수있는 빠른 API를 작성했습니다. .

이 O2 XRule 스크립트 파일에서이 API가 작동하는 것을 볼 수 있습니다 : ascx_View_SourceCode_AST.cs.o2 .

예를 들어 C # 소스 코드 텍스트를 처리하고 여러 TreeViews 및 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 파서 사용에 대한 첫 번째 단계이며 여전히 작동 방식에 대해 머리를 숙이고 있습니다)입니다) :

4
Dinis Cruz

최근 모든 C # 4.0 기능과 새로운 비동기 기능을 처리하는 C # 파서를 출시했습니다. C # Parser and CodeDOM

이 라이브러리는 주석 및 형식화 정보를 유지하고 수정 및 저장할 수있는 시맨틱 오브젝트 모델을 생성합니다. 또한 LINQ 쿼리를 사용하여 소스 코드를 분석 할 수 있습니다.

3
Ken Beckett
2
Galwegian

오픈 소스 IDE 인 SharpDevelop 는 방문자 기반 코드 파서와 함께 제공됩니다. IDE와 독립적으로 사용할 수 있습니다.

2
Akselsson

C # 코드를 직접 구문 분석하는 대신 빌드 된 바이너리에서 리플렉션을 사용하는 것이 좋습니다. 리플렉션 API는 사용하기가 쉽고 필요한 정보를 모두 얻을 수 있습니까?

2
Hallgrim

아마 당신은 irony.codeplex.com에서 Irony와 함께 시도 할 수 있습니다.

매우 빠르며 C # 문법이 이미 존재합니다.

문법 자체는 BNF와 같은 방식으로 C #으로 직접 작성됩니다 (일부 연산자 과부하로 인해 어려움을 겪음)

가장 좋은 점은 "문법"이 AST을 직접 생성한다는 것입니다.

2
SeeSoft

Gold Parser 를 살펴보십시오. 문법을 대화식으로 테스트하고 C # 코드를 생성 할 수있는 매우 직관적 인 IU가 있습니다. 사용 가능한 많은 예제가 있으며 완전히 무료입니다.

2
sbeskur

MS가 Apache 2 라이센스로 코드를 열었거나 곧 열리기 때문에 Roslyn을 확실히 확인해야합니다 here . GitHub 에서이 코드로이 정보를 구문 분석하는 방법을 확인할 수도 있습니다.

2
Jason

추진력이 높아지고 작업에 매우 적합한 것은 Nemerle

nDC의 다음 비디오에서 어떻게 해결할 수 있는지 확인할 수 있습니다.

1
Stéphane

C #에는 없지만 전체 AST를 빌드하는 전체 C # 2/3/4 파서는 DMS Software Reengineering Toolkit 을 통해 사용할 수 있습니다.

DMS는 구문 분석, 트리 구축, 심볼 테이블 및 흐름 분석 구성, 소스 간 변환 및 (수정 된) AST에서 소스 코드 재생성을위한 방대한 인프라를 제공합니다. (또한 C # 이외의 다른 많은 언어도 처리합니다.)

편집 (2013 년 9 월) :이 답변은 최근에 업데이트되지 않았습니다. DMS는 오랫동안 C # 5.0을 처리했습니다.

1
Ira Baxter