2009-06-19 17 views
11

Tôi đang tìm thư viện mã nguồn mở để phân tích cú pháp và thực thi công thức/hàm trong C#.Phân tích cú pháp và thực hiện các công thức với C#

Tôi muốn tạo một loạt các đối tượng xuất phát từ một giao diện (nghĩa là IFormulaEntity) có các thuộc tính/phương thức/giá trị và cho phép người dùng chỉ định công thức cho các đối tượng đó.

Ví dụ, tôi có thể có

public class Employee : IForumulaEntity 
{ 
     public double Salary { get; set; } 
     public void SendMessage(string message) 
} 

Sau đó, cho phép người dùng ứng dụng để viết một cái gì đó tương tự;

Employee person = <get from datasource> 
if (person.Salary > 1000) 
    person.Salary += 1000; 

person.SendMessage("Hello"); 

Điều này "trông giống như C#" nhưng nó sẽ là ngôn ngữ lập trình đơn giản. Tôi biết rất nhiều điều để hỏi. Tôi hy vọng người dùng của mình có khả năng hợp lý (tức là có thể viết các công thức Excel của riêng họ).

+0

(tại sao tôi thấy câu hỏi này là \ * \ * XÓA TÀI KHOẢN CỦA TÔI ** ở trang chính?) –

+0

Với hơn 5000 danh hiệu và 2 huy hiệu vàng, bạn nên biết rõ hơn là thử và thanh lọc nội dung câu hỏi của mình . Bạn có biết bạn có thể gắn cờ họ cho sự chú ý của người kiểm duyệt không? Chỉ cần nói rằng bạn muốn xóa tài khoản của mình. Họ sẽ chăm sóc phần còn lại cho bạn. Chỉ cần chỉnh sửa bằng thông báo đó sẽ không làm cho người kiểm duyệt thông báo cho bạn. – BoltClock

Trả lời

6

vào các chức năng cơ Rules là một phần của Windows Workflow Foundation.

Đây không phải là nơi mà mọi người sẽ nghĩ đến. Tuy nhiên, như một phần của công việc họ đã tạo ra giao diện người dùng cho phép nhà phát triển Workflow sử dụng các quy tắc và biểu thức có thể cấu hình, họ đã tìm ra cách để làm điều tương tự trong ứng dụng của riêng bạn, ngay cả khi bạn không sử dụng quy trình làm việc ở tất cả. Tài liệu của họ bao gồm các ví dụ về việc lưu trữ chức năng này trong ứng dụng Windows Forms.

+0

+1. Có điều này là chính xác các loại Im tìm kiếm [http://msdn.microsoft.com/en-us/library/aa480193.aspx] ngoại trừ tôi muốn cho phép người dùng của tôi để viết các quy tắc. –

+0

Đó là ý của tôi - nó _does_ cho phép người dùng viết các quy tắc. Bạn có thể lưu trữ trình thiết kế quy tắc trong ứng dụng của riêng mình và người dùng có thể viết các quy tắc. Sau đó, bạn có thể áp dụng định nghĩa quy tắc do người dùng viết dựa trên dữ liệu của bạn khi chạy. –

+0

Như thường lệ, Microsoft cung cấp các công cụ. Đó là lý do tại sao tôi yêu họ :) –

0

Spring expressions rất mạnh mẽ và ít hơn tất cả hoặc không có gì so với ví dụ: WF

(Động cơ được ANTLR dựa, và những biểu lộ chút, trong khi nó kéo trong một lib kích thước phong nha, yank doesnt trong tất cả các Spring.NET)

+0

Và vâng, tôi tự hào về tính kịp thời của câu trả lời của tôi! –

+0

AH! Stalker! Cuối cùng tôi đã tự mình lăn, bởi vì yêu cầu là cụ thể. Xem www.twipler.com/experiment –

+0

Phạm tội bị tính phí! Vâng, có vẻ như một chặng đường dài từ WF! –

0

Trong khi tôi đang đập này cho đến chết, Dynamic LINQ lượt trong không gian này (cụ thể là cú pháp C#). Rõ ràng phải cẩn thận rằng các yêu cầu (phát xạ/biên dịch mã) được hỗ trợ trong ngữ cảnh của bạn.

2

Bạn có thể sử dụng cs-script. Điều này cho phép bạn thực hiện mã C#, đó có thể là nhiều hơn thì bạn muốn, nhưng tại sao không chỉ dính vào C# thay vì tạo cú pháp C# -like của riêng bạn. Có thể tích hợp cs-script vào ứng dụng của bạn dưới dạng DLL và bạn có thể cho phép nó thực thi mã C# không phải là một phần của lớp để người dùng chỉ có thể viết vài câu lệnh mà họ cần.

Các vấn đề liên quan