Разбор и выполнение формул с C # - PullRequest
11 голосов
/ 19 июня 2009

Я ищу библиотеку с открытым исходным кодом для анализа и выполнения формул / функций в C #.

Я хотел бы создать группу объектов, которые являются производными от интерфейса (например, IFormulaEntity), который будет иметь свойства / методы / значения и позволять пользователю задавать формулы для этих объектов.

Например, у меня может быть

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

Затем разрешите пользователю приложения написать что-то вроде:

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

person.SendMessage("Hello");

Это "похоже на C #", но это будет упрощенный язык программирования. Я знаю, что это много, чтобы спросить. Я ожидал бы, что мои пользователи будут достаточно способными (то есть смогут писать свои собственные формулы Excel).

Ответы [ 5 ]

6 голосов
/ 19 июня 2009

Изучите функциональность движка правил, который является частью Windows Workflow Foundation.

Это не то место, куда можно подумать. Однако, как часть работы, которую они проделали для создания пользовательского интерфейса, который позволяет разработчику Workflow использовать настраиваемые правила и выражения, они придумали способ сделать то же самое в вашем собственном приложении, даже если вы не используете Workflow совсем. Их документация включает примеры размещения этой функции в приложении Windows Forms.

6 голосов
/ 19 июня 2009

Я использовал ANTLR, FSLEX / FSYACC и Managed Babel. Все делают то, что вы просите, и хотя все они бесплатны, только первый - с открытым исходным кодом.

Antlr: http://antlr.org/

FSLEX: http://www.strangelights.com/fsharp/wiki/default.aspx/FSharpWiki/fslex.html

Управляемый Вавилон: http://msdn.microsoft.com/en-us/library/bb165963.aspx

2 голосов
/ 24 июля 2009

Вы можете использовать cs-script . Это позволяет вам выполнять код на c #, что, возможно, больше, чем вы хотите, но почему бы просто не придерживаться c # вместо создания собственного синтаксиса, подобного c #. Можно интегрировать cs-script в ваше приложение как DLL, и вы можете позволить ему выполнять код c #, который не является частью класса, так что пользователи могут просто написать несколько необходимых им операторов.

0 голосов
/ 24 июля 2009

Пока я бью это до смерти, Dynamic LINQ играет в этом пространстве (в частности, синтаксис, подобный C #). Очевидно, будьте осторожны, чтобы его требования (передача / компиляция кода) поддерживались в вашем контексте.

0 голосов
/ 24 июля 2009

Весенние выражения очень мощные, и меньше всего или ничего, например, например. WF

(Движок основан на ANTLR, и бит выражений, хотя он загружает библиотеку приличного размера, не работает во всех Spring.NET)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...