Trình phân tích cú pháp nào có sẵn để phân tích cú pháp mã C #?
Tôi đang tìm một trình phân tích cú pháp C # có thể được sử dụng trong C # và cấp cho tôi quyền truy cập vào thông tin dòng và tệp về từng đồ vật của mã được phân tích.
Trình phân tích cú pháp nào có sẵn để phân tích cú pháp mã C #?
Tôi đang tìm một trình phân tích cú pháp C # có thể được sử dụng trong C # và cấp cho tôi quyền truy cập vào thông tin dòng và tệp về từng đồ vật của mã được phân tích.
Câu trả lời:
Hoạt động trên mã nguồn:
Hoạt động trên lắp ráp:
Vấn đề với assembly "phân tích cú pháp" là chúng ta có ít thông tin hơn về dòng và tệp (thông tin dựa trên tệp .pdb và Pdb chỉ chứa thông tin về dòng cho các phương thức)
Tôi khuyên bạn nên dùng Mono.Cecil và NRefactory .
Mono (mã nguồn mở) bao gồm trình biên dịch C # (và tất nhiên là trình phân tích cú pháp)
Nếu bạn định biên dịch C # v3.5 sang các hợp ngữ .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()
phương pháp.
Nếu bạn đã quen với ANTLR, bạn có thể sử dụng ngữ pháp Antlr C # .
Tôi đã triển khai những gì bạn đang yêu cầu (Phân tích cú pháp AST của mã C #) tại dự án Nền tảng OWASP O2 bằng cách sử dụng các API SharpDevelop AST.
Để dễ sử dụng hơn, tôi đã viết một API nhanh để hiển thị một số phần tử mã nguồn chính (sử dụng câu lệnh, kiểu, phương thức, thuộc tính, trường, nhận xét) và có thể viết lại mã C # ban đầu thành C # và vào VBNET .
Bạn có thể thấy API này đang hoạt động trên tệp kịch bản O2 XRule này: ascx_View_SourceCode_AST.cs.o2 .
Ví dụ: đây là cách bạn xử lý văn bản mã nguồn C # và điền một số 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");
}
Ví dụ trên ascx_View_SourceCode_AST.cs.o2 cũng cho thấy cách bạn có thể sử dụng thông tin thu thập được từ AST để chọn loại, phương pháp, nhận xét, v.v. trên mã nguồn.
Để tham khảo, đây là mã API đã viết (lưu ý rằng đây là lần đầu tiên tôi sử dụng trình phân tích cú pháp C # AST của SharpDevelop và tôi vẫn đang suy nghĩ về cách hoạt động của nó):
Gần đây chúng tôi đã phát hành trình phân tích cú pháp C # xử lý tất cả các tính năng của C # 4.0 cùng với tính năng không đồng bộ mới: Trình phân tích cú pháp C # và CodeDOM
Thư viện này tạo ra một mô hình đối tượng ngữ nghĩa giữ lại các nhận xét và thông tin định dạng và có thể được sửa đổi và lưu lại. Nó cũng hỗ trợ việc sử dụng các truy vấn LINQ để phân tích mã nguồn.
SharpDevelop , một IDE mã nguồn mở, đi kèm với một trình phân tích mã dựa trên khách truy cập, hoạt động thực sự tốt. Nó có thể được sử dụng độc lập với IDE.
Cân nhắc sử dụng phản xạ trên một nhị phân được xây dựng thay vì phân tích mã C # trực tiếp. API phản chiếu thực sự dễ sử dụng và có lẽ bạn có thể nhận được tất cả thông tin mình cần?
Hãy xem Gold Parser . Nó có một IU rất trực quan cho phép bạn kiểm tra ngữ pháp của mình một cách tương tác và tạo mã C #. Có rất nhiều ví dụ có sẵn với nó và nó hoàn toàn miễn phí.
Có lẽ bạn có thể thử với Irony trên irony.codeplex.com.
Nó rất nhanh và ngữ pháp ac # đã tồn tại.
Bản thân ngữ pháp được viết trực tiếp bằng c # theo cách giống như BNF (có một số lỗi nạp chồng toán tử)
Điều tốt nhất với nó là "ngữ pháp" tạo ra AST trực tiếp.
Một thứ đang có động lực và rất thích hợp với công việc là Nemerle
bạn có thể xem cách nó có thể giải quyết nó trong các video này từ NDC:
Không có trong C #, nhưng trình phân tích cú pháp C # 2/3/4 đầy đủ để xây dựng các AST đầy đủ có sẵn với Bộ công cụ tái cấu trúc phần mềm DMS của chúng tôi .
DMS cung cấp một cơ sở hạ tầng rộng lớn để phân tích cú pháp, xây dựng cây, xây dựng các bảng ký hiệu và phân tích luồng, chuyển đổi từ nguồn sang nguồn và tái tạo mã nguồn từ các AST (đã sửa đổi). (Nó cũng xử lý nhiều ngôn ngữ khác ngoài C #.)
EDIT (Tháng 9) 2013: Câu trả lời này chưa được cập nhật gần đây. DMS từ lâu đã xử lý C # 5.0