it-swarm-vi.com

Trình phân tích cú pháp cho C #

Những trình phân tích cú pháp nào có sẵn để phân tích mã C #?

Tôi đang tìm kiếm một trình phân tích cú pháp C # có thể được sử dụng trong C # và cung cấp cho tôi quyền truy cập vào thông tin dòng và tệp về từng thành phần của mã được phân tích.

99
Julien Hoarau

Hoạt động trên mã nguồn:

Hoạt động trên hội:

Vấn đề với hội "phân tích cú pháp" là chúng tôi 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 dòng cho phương thức)

Tôi khuyên bạn nên Mono.Cecil NRefactory .

116
Julien Hoarau

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)

7
aku

Nếu bạn định biên dịch các cụm từ C # v3.5 thành .net:

var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

http://msdn.Microsoft.com/en-us/l Library/Macrosoft.csharp.csharpcodeprovider.aspx

6
zproxy

Nếu bạn quen thuộc với ANTLR, bạn có thể sử dụng Antlr C # grammar .

5
prosseek

Tôi đã triển khai đúng những gì bạn đang yêu cầu (Phân tích cú pháp AST mã C #) tại Nền tảng OWASP O2 dự án sử dụng API SharpDevelop AST API.

Để dễ tiêu thụ 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, loại, 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 hoạt động trên tệp tập lệnh 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 vào một số TreeViews & TextBoxes:

    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 được thu thập từ AST để chọn mã nguồn một loại, phương thức, nhận xét, v.v.

Để 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 thức hoạt động của nó):

4
Dinis Cruz

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 # 4.0 cộng với tính năng async 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 bình luận và định dạng thông tin 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.

3
Ken Beckett
2
Galwegian

SharpDevelop , một IDE nguồn mở, đi kèm với trình phân tích cú pháp 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.

2
Akselsson

Cân nhắc sử dụng sự phản chiếu trên một nhị phân được xây dựng thay vì phân tích trực tiếp mã C #. 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 bạn cần?

2
Hallgrim

Có lẽ bạn có thể thử với Irony trên irony.codeplex.com.

Nó rất nhanh và một ngữ pháp c # đã tồn tại.

Bản thân ngữ pháp được viết trực tiếp bằng c # theo cách tương tự BNF (đạt được một số trường hợp quá tải toán tử)

Điều tốt nhất với nó là "ngữ pháp" tạo ra AST trực tiếp.

2
SeeSoft

Hãy xem Gold Parser . Nó có một IU rất trực quan cho phép bạn tương tác kiểm tra ngữ pháp của bạn 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í.

2
sbeskur

Bạn chắc chắn nên kiểm tra Roslyn vì MS vừa mở (hoặc sẽ sớm mở) mã có giấy phép Apache 2 tại đây . Bạn cũng có thể kiểm tra cách phân tích thông tin này bằng mã này từ GitHub .

2
Jason

Một cái gì đó đang đạt được đà và rất thích hợp cho công việc là Nemerle

bạn có thể thấy cách nó có thể giải quyết nó trong các video này từ NDC:

1
Stéphane

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 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 bảng biểu tượng và phân tích dòng chảy, chuyển đổi nguồn-nguồn và tái tạo mã nguồn từ 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 đã xử lý C # 5.0 từ lâu

1
Ira Baxter