Esse artigo faz parte da revista Clube Delphi Edição 76. Clique aqui para ler todos os artigos desta edição

IZE: 10pt; FONT-FAMILY: Verdana">...

TEasyEvaluator = class(TObject)

 private

   FOwnContext: TExprHashContext;

   FExtContextSet: TExprSetContext;

   FInternalContextSet: TExprSetContext;

 protected

   property InternalContextSet: TExprSetContext

     read FInternalContextSet;

 public

   constructor Create;

   destructor Destroy; override;

   procedure AddVar(const AName: string;

     var AVar: TFloat32); overload;

   procedure AddVar(const AName: string;

     var AVar: TFloat64); overload;

   procedure AddVar(const AName: string;

     var AVar: TFloat80); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat32); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat64); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat80); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat80Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TUnary32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TUnary64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TUnary80Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TBinary32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TBinary64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TBinary80Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TTernary32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TTernary64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TTernary80Func); overload;

   procedure Remove(const AName: string);

   procedure Clear;

   property ExtContextSet: TExprSetContext

    read FExtContextSet;

 end;

 TEvaluator = class(TEasyEvaluator)

 private

   FLexer: TExprSimpleLexer;

   FParser: TExprEvalParser;

 public

   constructor Create;

   destructor Destroy; override;

   function Evaluate(const AExpr: string): TFloat;

 end;

...

Para que possamos entender o funcionamento da classe TEvaluator é importante estudarmos o significado de três conceitos dentro do contexto: Variáveis, Constantes e Funções.

·         Variáveis: São entidades que representam valores e podem ter seu valor alterado;

·         Constantes: Assim como as variáveis, representam valores, porém, não podem ser alteradas;

·         Funções: Representam chamadas a funções internas da aplicação.

Com base nisso, veremos então os métodos principais da classe:

·         AddVar: Adiciona ao interpretador de expressões uma variável cujo nome será passado como uma string e representará a variável interna passada como parâmetro;

·         AddConst: Da mesma forma que a AddVar, passa uma constante para o interpretador, cujo nome será passado como primeiro parâmetro e a constante que representa, o segundo parâmetro;

· ...

Quer ler esse conteúdo completo? Tenha acesso completo