使用C#解析并执行公式

时间:2009-06-19 09:18:50

标签: c# parsing

我正在寻找一个开源库来解析和执行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 个答案:

答案 0 :(得分:6)

我使用过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

答案 1 :(得分:6)

查看属于Windows Workflow Foundation的规则引擎功能。

这不是一个人们会想到的地方。但是,作为他们为生成允许Workflow开发人员使用可配置规则和表达式的UI所做的工作的一部分,他们已经提出了一种在自己的应用程序中执行相同操作的方法,即使您没有使用Workflow也是如此一点都不他们的文档包括在Windows窗体应用程序中托管此功能的示例。

答案 2 :(得分:2)

您可以使用cs-script。这允许你执行c#代码,这可能是你想要的,但为什么不坚持使用c#而不是创建自己的类似c#的语法。可以将cs-script作为DLL集成到应用程序中,并且可以允许它执行不属于类的c#代码,以便用户可以只编写他们需要的几个语句。

答案 3 :(得分:0)

Spring expressions非常强大,而不是全部或全部,例如WF

(引擎基于ANTLR,表达式位,虽然它引入了一个相当大的lib,但并没有在所有Spring.NET中拉动)

答案 4 :(得分:0)

当我打败这个时,Dynamic LINQ在这个空间中扮演(特别是C#语法)。显然要小心,在你的上下文中支持它的要求(代码的发布/编译)。