Simple Expression Evaluator project now on CodePlex
August 28, 2008I have uploaded a new project, Simple Expression Evaluator, to Codeplex. I haven’t had time to create any documentation
yet, but as usual the project contains unit tests and a sample application to play with. Simple Expression Evaluator abstracts the the parser+compiler from the object model, allowing any kind of parser to be used to construct expressions. Simple Expression Evaluator works by converting an Abstract Syntax Tree into an Expression Tree and evaluating the expression tree. A discussion of dynamic expression evaluation and links to resources can be found here. It is very simple to add new language elements, operators or functions, and comes with an array of options for plugging in custom variable evaluators or function evaluators by either implementing an interface or by associating events with delegates.
Simple Expression Evaluator’s default parser and expression language use the Irony.net Compiler toolkit. The expression language itself is a modified, stripped down version of Script.NET (S#) and supports things like array indexers and aggregate functions such as Sum, Avg, etc that can be used on collections. Here is a screen shot of the sample app:













Doest it have a purpose?Because I would solve this issue
Ayende Rahien | August 29, 2008 | 6:41 amDoest it have a purpose?
Because I would solve this issue with BooParser.ParseString()
Ahh Mr. Rahien, I do love how you sugarcoat everything
nstults | August 29, 2008 | 10:16 amAhh Mr. Rahien, I do love how you sugarcoat everything you say. One day you'll walk into a blog and say just what you mean and shock everyone out of their boots.
I wasn't actually aware of BooParser.ParseString until just this moment. It looks to me, though, like the method gives you an AST tree, which you could then optionally compile and run. This is fine, but I'd still either need to compile the AST tree to my own object model or do a good bit of mucking around with the Boo AST to make sure custom variables were expanded properly, custom functions, etc. I am not sure it would have been any less work at the end of the day, and probably a bit more opaque.
That being said, I'm *not* sure Simple Expression Evaluator has a strong value proposition when compared to the two already existing Expression Evaluators on CodePlex, FLEE (uses dynamic code generation) and LazyParser (uses reflection). Both probably would work as well as mine, and existed before I wrote this. But I wanted a good excuse to try out Irony.net, and I selfishly wanted full control of the API. And, of course, I like this crap, and enjoy the tinkering (something I'm sure you could never understand
) Whether or not it provides anybody with a new and better expression eval library (probably not) it can serve as a pretty textbook example of one common approach to turning an AST into an object model and evaluating it.
Great reason to write it, mind you.I wanted to know
Ayende Rahien | September 4, 2008 | 8:54 amGreat reason to write it, mind you.
I wanted to know that you are aware of the other options.
Great reason to write it, mind you.I wanted to know
Ayende Rahien | September 4, 2008 | 1:54 pmGreat reason to write it, mind you.
I wanted to know that you are aware of the other options.