The Freak Parade

Strange noises from the mind of Nathan Stults…
  • rss
  • Home
  • About The Freak Parade

Simple Expression Evaluator project now on CodePlex

August 28, 2008

I have uploaded a new project, Simple Expression Evaluator, to Codeplex. I haven’t had time to create any documentation imageyet, 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:

Share: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • DZone
  • Digg
  • Google Bookmarks
  • Ma.gnolia
  • Technorati
hello
Categories
Tools
Comments rss
Comments rss
Trackback
Trackback

« Simple State Machine updated with new Persistence Service Data Structures and Algorithms E-Book (Or, the fast track to limitless power and wealth) »

View Comments

Doest it have a purpose?Because I would solve this issue

Ayende Rahien | August 29, 2008 | 6:41 am

Doest 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 am

Ahh 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 am

Great 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 pm

Great reason to write it, mind you.
I wanted to know that you are aware of the other options.

Leave a comment

You can use these tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe

Calendar

August 2008
M T W T F S S
« Jul   Sep »
 123
45678910
11121314151617
18192021222324
25262728293031

Recent Posts

  • Lucy in the Sky with Ruby
  • Simple ASP.NET MVC Ajax Proxy
  • The incredible, fallible symmetric Unit Test, and the beauty of Open Source software.
  • You Can’t Fill an Imaginary Hole
  • I don’t know but I’ve been told, ETL is gettin’ mighty old. BAM! BAM! EDA! I want my data right away!

Recent Comments

  • Kim Won on SOA, ESBs and JBOWS, oh my!
  • AbdirahmanDaud on New Open Source .NET CMS/EPS Platform Released Today: Sense/Net 6.0 Beta 1
  • None on Rinsing the SOAP from WCF (or, RESTful WCF Hyperlink Acupuncture)
  • chill71uk on Simple ASP.NET MVC Ajax Proxy
  • mrhookah on Rule Based Access Control using an Expression Evaluator

Tags

TDD Testing

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox