我正在寻找一个开源库来解析和执行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公式)。
答案 0 :(得分:6)
我使用过ANTLR,FSLEX / FSYACC和Managed Babel。所有人都按照你的要求行事,虽然所有人都是免费的,但只有第一个是开源的。
Antlr:http://antlr.org/
FSLEX:http://www.strangelights.com/fsharp/wiki/default.aspx/FSharpWiki/fslex.html
答案 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#语法)。显然要小心,在你的上下文中支持它的要求(代码的发布/编译)。