Tag Archives | expression trees

Building Expression Evaluator with Expression Trees in C# – Part 2

Introduction

In previous post I showed how to build a simple expression evaluator using expression trees. Although it works fine it has some drawbacks:

  • It does not support parentheses.
  • It does not support variables.
  • In some cases the result can be wrong as the parser is not using left to right parsing.
  • It is compiling delegates for every expression which results in slower execution.

To solve these issues we will use a different algorithm and deal with all points except variable support.

Continue Reading →

10
Spread the word...Tweet about this on TwitterShare on Google+Share on RedditShare on FacebookEmail this to someone

Building Expression Evaluator with Expression Trees in C# – Table of Contents

This is table of contents for Building Expression Evaluator with Expression Trees in C# series. We are going to build a simple mathematical expression evaluator in C# using expression trees. The library supports simple expressions such as 2.5+5.9, 17.89-2.47+7.16, 5/2/2+1.5*3+4.58, expressions with parentheses (((9-6/2)*2-4)/2-6-1)/(2+24/(2+4)) and expressions with variables:

var a = 6;
var b = 4.32m;
var c = 24.15m;
Assert.That(engine.Evaluate("(((9-a/2)*2-b)/2-a-1)/(2+c/(2+4))", a, b, c), 
            Is.EqualTo((((9 - a / 2) * 2 - b) / 2 - a - 1) / (2 + c / (2 + 4))));

At the end of the series full source code will be available at github and the library will be published to NuGet.

Source code is available at github: Math-Expression-Evaluator

Table of Contents

  1. Building Expression Evaluator with Expression Trees in C# – A basic implementation.
  2. Building Expression Evaluator with Expression Trees in C# – Adding support for parentheses.
  3. Building Expression Evaluator with Expression Trees in C# – Adding support for variables.
  4. Building Expression Evaluator with Expression Trees in C# – Improving the Api
2
Spread the word...Tweet about this on TwitterShare on Google+Share on RedditShare on FacebookEmail this to someone