답변:
소스 코드에서 작동 :
조립 작업 :
어셈블리 "파싱"의 문제는 줄과 파일에 대한 정보가 적다는 것입니다 (정보는 .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 # 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 쿼리를 사용하여 소스 코드를 분석 할 수 있습니다.
오픈 소스 IDE 인 SharpDevelop 에는 방문자 기반 코드 파서가 함께 제공됩니다. IDE와 독립적으로 사용할 수 있습니다.
C # 코드를 직접 구문 분석하는 대신 빌드 된 바이너리에 리플렉션을 사용하는 것이 좋습니다. 리플렉션 API는 정말 사용하기 쉽고 필요한 모든 정보를 얻을 수 있습니까?
Gold Parser를 살펴보십시오 . 대화식으로 문법을 테스트하고 C # 코드를 생성 할 수있는 매우 직관적 인 IU가 있습니다. 그것과 함께 사용 가능한 많은 예제가 있으며 완전히 무료입니다.
추진력을 얻고 작업에 매우 적합한 것은 Nemerle입니다.
NDC의 다음 비디오에서 어떻게 해결할 수 있는지 확인할 수 있습니다.
C #에는 없지만 전체 AST를 빌드하는 전체 C # 2/3/4 파서는 DMS 소프트웨어 리엔지니어링 툴킷 과 함께 사용할 수 있습니다 .
DMS는 구문 분석, 트리 구축, 심볼 테이블 구성 및 흐름 분석, 소스에서 소스로의 변환, (수정 된) AST에서 소스 코드 재생성을위한 방대한 인프라를 제공합니다. (또한 C # 이외의 다른 많은 언어도 처리합니다.)
편집 (9 월) 2013 :이 답변은 최근에 업데이트되지 않았습니다. DMS는 오랫동안 C # 5.0을 처리했습니다.