ExpressionEval error management

1. Description

The component provide a complete and fine-grained management of errors when an expression is parsed and executed/evaluated. Several error code , more than 50, are available to describe with precision the error.

There are two main kinds of error:

  • Expression Error
    • Parse Error
    • Execution/evaluation Error
  • Licence Error
  • Configuration Error (var definition and function attachment).

2. Manage expression error

This case concerns errors occuring when a expression is wrong, during the parse stage or during the execution/evaluation stage.

The standard and easiest way to manage these sort of errors is to check it after the execution/evaluation of an expression.

Example, the code below try to compare an integer and a boolean, an error occurs:

ExpressionEval evaluator = new ExpressionEval();

// 1-parse the expression, find variables
evaluator.Parse("a=b");

// 2-set variables values
evaluator.DefineVarInt("a", 4);
evaluator.DefineVarInt("b", 5);

// 3-evaluate expression
ExecResult execResult = evaluator.Exec();

// 4-check the result
if (execResult.HasError)
{
  // display the error code
  Console.WriteLine("The expr '" + expr + "' has errors, nb=" + execResult.ListError.Count);
  ExprError error = execResult.ListError[0];
  Console.WriteLine("Error code: " + error.Code);

  // display the error parameter (the position of the wrong token)
  Console.WriteLine("Error param: " + error.ListErrorParam[0].Key+ "= " + error.ListErrorParam[0].Value);

  return;
}

The error code returned is: ExprComparisonOperandsTypeMismatchIntExpected.

The console should displays :

====The expression is: (a=b)
The expr '(a=b)' has errors, nb=1
Error code: ExprComparisonOperandsTypeMismatchIntExpected
Error param: Position= 3

Another way is to check error just after the parse stage and then again after the execution/evaluation stage.

3. Manage license error

Concerning the license of the component, several errors can occurs:

  • ErrorBadFormed
    • The string license key is wrong.
  • ErrorDataWrong
    • One or more license property is wrong (can be a date or an expected value).
  • ErrorOutOfDate
    • The license is out of date (too old).
  • ErrorLicenceProductDoesntMatchComponentProduct
    • The license does not concern the component.

Here is an example of an out of date license set to the component:

ExpressionEval evaluator = new ExpressionEval();

// the generated encrypted licence info
string encryptedLicence = "P2OAd87qJOBDKit09Z5EM89kul1WmlGNXAkTseJdV8le+h9bmZHB6MC5fisGqFXoqmRlqvYxJeF3bDHhmm/4cMV11/xqqgWeGcBLnozWyEoxsbJRaWdTOkxldifspwEyyhYeLw75zgc=";

LicenseInfoStatus res = evaluator.License.SetLicenseInfo(encryptedLicence);
Console.WriteLine("LicenseInfoStatus (should be ErrorOutOfDate): " + res.ToString());

// is the current licence valid?  
bool isLicenceValid = evaluator.License.IsValid();
Console.WriteLine("Is licence valid (should be false)? " + isLicenceValid.ToString());


// parse an expression, should finish with success
ParseResult parseResult = evaluator.Parse("a=b");

// should finish with ERROR
Console.WriteLine("error occurs (due to a license problem) (should be true)? " + parseResult.HasError);

Console.WriteLine("error code (should be LicenceInvalid): " + parseResult.ListError[0].Code.ToString());

The console should displays :

====Set an Out of date license:
LicenseInfoStatus (should be ErrorOutOfDate): ErrorOutOfDate
Is licence valid (should be false)? False
error occurs (due to a license problem) (should be true)? True
error code (should be LicenceInvalid): LicenceInvalid