I am faced with a task of allowing the user to define the expressions using the compiled classes with RTTI enabled. Let me put it in a simple way.
TAnimal = class(TPersistent)
private
fWeight : Double;
fHeight : Double;
fName : string;
published
property Weight : Double read fWeight write fWeight;
property Height : Double read fHeight write fHeight;
property Name : string read fName write fName;
end;
And i have a routine which will evaluate the animal with the supplied expression
function EvaluateAnimal(const animal : TAnimal; expression : string) : Double;
begin
//Result := Turn expression to evaluation and give the result
end;
The user expression is
(TAnimal.Weight * TAnimal.Height)/(TAnimal.Weight + TAnimal.Height)
Now, I can get the TAnimal using the RTTI Context and get the value of the animal's Height and Weight. However, how can i evaluate the expression what the user has supplied??
Is there any mechanism which i can use to prepare the user expression when my application starts and at runtime, just send the instance of animal to retrieve the value. The user is free to change the expression at anytime and the application has to evaluate the expression.
I am using Delphi XE3.
mathematical expression parser in Delphi?
. Depending on how complex the expression is, a scripting language could be used, seeScripting library for Delphi
. – LU RDDWScript
. – LU RD