Parse and execute formulas with C#

2019-03-13 03:56发布

I am looking for an open source library to parse and execute formula/functions in C#.

I would like to create a bunch of objects that derive from an interface (i.e. IFormulaEntity) which would have properties/methods/values and the allow a user to specify formulas for those objects.

For example, I might have

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

Then allow an application user to write something like;

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

person.SendMessage("Hello");

This "looks like C#" but it would be a simplified programming language. I know it's alot to ask. I would expect my users to be reasonably capable (i.e. can write their own Excel formulas).

标签: c# parsing
5条回答
Luminary・发光体
2楼-- · 2019-03-13 04:14

Spring expressions are very powerful, and less of an all or nothing than e.g. WF

(The engine is ANTLR based, and the expressions bit, while it pulls in a decent sized lib, doesnt yank in all of Spring.NET)

查看更多
成全新的幸福
3楼-- · 2019-03-13 04:23

I've used ANTLR, FSLEX/FSYACC and Managed Babel. All do what you are asking, and while all are free, only the first is open source.

Antlr: http://antlr.org/

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

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

查看更多
叛逆
4楼-- · 2019-03-13 04:23

While I'm beating this to death, Dynamic LINQ plays in this space (specifically the C# like syntax). Obviously be careful that it's requirements (emission/compilation of code) are supported in your context.

查看更多
时光不老,我们不散
5楼-- · 2019-03-13 04:25

Look into the Rules Engine functionality that is part of Windows Workflow Foundation.

This is not a place one would think to look. However, as part of the work they did to produce a UI that allows a Workflow developer to use configurable rules and expressions, they've come up with a way to do the same thing in your own application, even if you are not using Workflow at all. Their documentation includes examples of hosting this functionality in a Windows Forms application.

查看更多
劳资没心,怎么记你
6楼-- · 2019-03-13 04:27

You could use cs-script. This allows you to execute c# code, that is maybe more then you want, but why not just stick to c# instead of creating your own c#-like syntax. It is possible to integrate cs-script into your application as DLL and you can allow it to execute c# code that is not part of a class so that users can just write the few statements they need.

查看更多
登录 后发表回答