#ifndef ALIEXPRESSION_H
#define ALIEXPRESSION_H
#include <TObject.h>
class TString;
class TObjArray;
enum { kOpAND=1,
kOpOR,
kOpNOT };
class AliExpression : public TObject {
public:
AliExpression() : fVname(0), fArg1(0), fArg2(0), fOperator(0) {}
AliExpression( TString exp );
virtual ~AliExpression();
AliExpression( const AliExpression& exp ) : TObject( exp ),
fVname(exp.fVname),
fArg1(exp.fArg1), fArg2(exp.fArg2),
fOperator(exp.fOperator) {}
AliExpression& operator=(const AliExpression& exp);
virtual Bool_t Value( const TObjArray & vars );
virtual TString Unparse() const;
TString fVname;
private:
AliExpression* fArg1;
AliExpression* fArg2;
Int_t fOperator;
AliExpression( int op, AliExpression* a );
AliExpression( int op, AliExpression* a, AliExpression* b );
TObjArray* Tokenize( TString str ) const;
static AliExpression* Element( TObjArray &st, Int_t &i );
static AliExpression* Primary( TObjArray &st, Int_t &i );
static AliExpression* Expression( TObjArray &st, Int_t &i );
ClassDef( AliExpression, 2 )
};
class AliVariableExpression: public AliExpression {
public:
AliVariableExpression( TString a ): AliExpression() { fVname = a; };
~AliVariableExpression() {}
virtual Bool_t Value( const TObjArray& pgm );
virtual TString Unparse() const { return fVname; }
ClassDef( AliVariableExpression, 2 )
};
#endif