代码之家  ›  专栏  ›  技术社区  ›  Dead account

用C解析和执行公式#

  •  11
  • Dead account  · 技术社区  · 16 年前

    我正在寻找一个开放源代码库来解析和执行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 回复  |  直到 15 年前
        1
  •  6
  •   John Saunders    16 年前

    查看作为Windows工作流基础的一部分的规则引擎功能。

    这不是一个可以想象的地方。但是,作为他们为生成一个允许工作流开发人员使用可配置规则和表达式的UI所做工作的一部分,他们想出了一种在您自己的应用程序中执行相同操作的方法,即使您根本不使用工作流。他们的文档包括在Windows窗体应用程序中承载此功能的示例。

        2
  •  6
  •   codekaizen    16 年前

    我使用了Antlr、Fslex/Fsyac和Managed Babel。所有人都按照你的要求去做,虽然所有人都是免费的,但只有第一个是开源的。

    Antlr: http://antlr.org/

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

    管理Babel: http://msdn.microsoft.com/en-us/library/bb165963.aspx

        3
  •  2
  •   Stefan Egli    16 年前

    你可以使用 cs-script .这允许您执行C代码,这可能比您想要的要多,但是为什么不坚持使用C而不是创建您自己的C样的语法呢?可以将cs脚本作为dll集成到应用程序中,并允许它执行不属于类的C代码,这样用户就可以只编写他们需要的几个语句。

        4
  •  0
  •   Ruben Bartelink    16 年前

    Spring expressions 是非常强大的,比WF更不重要。

    (引擎是基于antlr的,表达式bit,当它拉入一个合适大小的lib时,不会在所有spring.net中猛拉)

        5
  •  0
  •   Ruben Bartelink    16 年前

    当我把它打死的时候, Dynamic LINQ 在这个空间中播放(特别是类似C的语法)。显然要小心,在您的上下文中支持它的需求(代码的排放/编译)。