Program EasyEvalExample;
{
    Copyright (c) 2011 by Marco van de Voort(marco@freepascal.org)
    member of the Free Pascal development team

    See the file COPYING.FPC, included in this distribution,
    for details about the copyright. (LGPL-with-static-linking-exception)

    Rock bottom example of new evaluator helper function.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}

{$mode delphi}
Uses Symbolic,Classes,sysutils;

var s : AnsiString;
    a : extended;
    b : integer;
    
begin
  // quickevaluate('expression',[],[]); evaluates a constant expression to an
  //  extended result

  s:='(5+5+10)*2';
  writeln(s,'=',QuickEvaluate(s,[],[]):10:1);


  // ... but still allows variables:

  a:=2.0;
  b:=3;
  s:='(5+A+10)*B';
  // variable names are case sensitive!
  writeln(s,'=',QuickEvaluate(s,['A','B'],[a,b]):10:1,' with A=',a:0:1,' and B=',b);

 // now let's do that again, but add a symbol (C) that we don't define:

 try
   a:=2.0;
   b:=3;
   s:='(5+A+10)*B+C';
   // variable names are case sensitive!
   writeln(s,'=',QuickEvaluate(s,['A','B'],[a,b]):10:1,' with A=',a:0:1,' and B=',b);
 except
   on E:Exception do
     Writeln('An exception occurred: ',e.message);
   end;
end.