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