C # 코드를 구문 분석하는 데 사용할 수있는 파서는 무엇입니까?
C #에서 사용할 수 있고 분석 된 코드의 각 아티팩트에 대한 줄 및 파일 정보에 액세스 할 수있는 C # 파서를 찾고 있습니다.
답변
소스 코드에서 작동 :
- CSParser : C # 1.0에서 2.0까지, 오픈 소스
- Metaspec C # Parser : C # 1.0 ~ 3.0, 상용 제품 (약 5000 $)
- #인식하다! : C # 1.0 ~ 3.0, 상용 제품 (약 900 €) ( SharpRecognize 답변 )
- SharpDevelop 파서 ( Akselsson의 답변 )
- NRefactory : SharpDevelop에서 사용되는 C # 1.0에서 4.0 (+ async), 오픈 소스, 파서입니다. 의미 분석을 포함합니다.
- C # 파서 및 CodeDOM : 완전한 C # 4.0 파서, 이미 C # 5.0 비동기 기능을 지원합니다. 상용 제품 (49 $ ~ 299 $) ( Ken Beckett의 답변 )
- Microsoft Roslyn CTP : 서비스로서의 컴파일러.
조립 작업 :
- System.Reflection
- Microsoft Common Compiler Infrastructure : C # 1.0에서 3.0까지, Microsoft Public License. 에서 사용 의 FxCop 및 사양 #
- Mono.Cecil : C # 1.0에서 3.0까지, 오픈 소스
어셈블리 “파싱”의 문제는 줄과 파일에 대한 정보가 적다는 것입니다 (정보는 .pdb 파일을 기반으로하고 Pdb에는 메서드에 대한 줄 정보 만 포함됨).
Mono.Cecil 과 NRefactory를 개인적으로 추천 합니다.
답변
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 쿼리를 사용하여 소스 코드를 분석 할 수 있습니다.