Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse and execute formulas with C#

Tags:

c#

parsing

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).

like image 663
Dead account Avatar asked Jun 19 '09 09:06

Dead account


3 Answers

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.

like image 115
John Saunders Avatar answered Oct 22 '22 11:10

John Saunders


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

like image 25
codekaizen Avatar answered Oct 22 '22 09:10

codekaizen


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.

like image 37
Stefan Egli Avatar answered Oct 22 '22 10:10

Stefan Egli