2009-08-27 39 views
6

Tôi cần một trình phân tích cú pháp hoặc ngữ pháp cho C# 3.0 (giấy phép nguồn mở). Lựa chọn tốt nhất hôm nay là gì?Trình phân tích cú pháp tốt nhất cho C#?

+0

Chỉ cần tò mò .. tại sao bạn muốn một? – RCIX

+0

Thử nghiệm với các biến đổi mã. – skevar7

+0

Nếu bạn sử dụng Visual Studio SDK, bạn có thể lấy mô hình đối tượng tài liệu đầy đủ của dự án C# để thực hiện các phép biến đổi đó. VS đã sử dụng nó để khúc xạ và intellisense và rất nhiều addins sử dụng quá. –

Trả lời

3

Check-out Metaspec's C# parser:

Các Metaspec C# phân tích cú pháp là hoàn toàn phù hợp với ECMA-334 và ECMA-335 tiêu chuẩn. Ngoài ra, nó hỗ trợ tiện ích mở rộng dành riêng cho Microsoft. Để biết chi tiết về thư viện trình phân tích cú pháp C#, hãy xem tài liệu trực tuyến (C# hoặc ấn bản C++).

C# 3.0 hỗ trợ các tính năng:

loại
  • mới C# 3.0 Thuật toán suy luận
  • ngầm gõ các biến địa phương
  • initializers đối tượng
  • initializers bộ sưu tập
  • tạo đối tượng ẩn danh biểu thức
  • lambda biểu thức
  • kiểu nặc danh
  • phương pháp khuyến nông
  • truy vấn biểu thức
  • phương pháp phần

C# 2.0 hỗ trợ các tính năng:

  • Generics
  • loại nullable
  • phương pháp vô danh
+0

Có phải * nguồn mở * không? – skevar7

+0

Tôi không chắc chắn - bạn sẽ cần liên hệ với Metaspec để lấy một bản sao giấy phép của họ. –

0

Phụ thuộc vào những gì bạn đang optimzing trên.

Nếu bạn đang tối ưu hóa khả năng chuyển đổi C#, xem C# Front End cho trình phân tích cú pháp xử lý C# 1.2, 2.0 và 3.0 (bao gồm cú pháp LINQ). Mặt trận C# được xây dựng trên đầu trang của DMS Software Reengineering Toolkit cung cấp phân tích cú pháp, xây dựng tự động các AST, hỗ trợ cho các bảng biểu tượng, chuyển đổi chương trình nguồn thành sử dụng cú pháp cấp nguồn với các mẫu và AST trở lại văn bản nguồn. Nếu bạn đang tìm kiếm để chuyển đổi mã C#, đây là công cụ để làm điều đó. (DMS cũng được sử dụng để phân tích và chuyển đổi mã trong Java, C, C++, JavaScript, COBOL và nhiều ngôn ngữ khác).

Nếu bạn đang tối ưu hóa nguồn mở, đây không phải là công cụ bạn muốn.

1

Tôi khuyên bạn ít nhất nên xem dự án LINQOverC# được lưu trữ trên codeproject.com.

URL: http://www.codeplex.com/LinqOverCSharp

Có một số (nhỏ?) các vấn đề đã biết và chưa được cập nhật kể từ tháng 1 năm 2008 (có thể là một vấn đề khá lớn), nhưng mã nguồn cho trình phân tích cú pháp C# 3.0 nhanh và 100%.

điều tôi yêu thích về phân tích cú pháp này:

  1. Nó có thể tải một tập tin dự án Visual Studio (csproj) khá nhiều ra khỏi hộp, và phân tích toàn bộ công việc (bao gồm cả tài liệu tham khảo lắp ráp).

  2. Bạn có thể truy vấn, liệt kê, lọc, vv, mô hình đối tượng được phân tích cú pháp (cây) bằng LINQ. Mà nó làm cho nó gần như tầm thường để đi qua lên và xuống và tất cả xung quanh bất cứ điều gì bạn đang phân tích cú pháp.

Dưới đây là một truy vấn LINQ mẫu cho việc tìm kiếm một biến hay tham số trong một phương pháp, nơi của biến name = VariableName:

variable = (from v in method.Variables 
          where string.Compare(v.Name, VariableName, false) == 0 
          select v as LanguageElement).Union(
           from p in method.FormalParameters 
           where string.Compare(p.Name, VariableName, false) == 0 
           select p as LanguageElement).FirstOrDefault(); 
Các vấn đề liên quan