/* "CodeWorker": a scripting language for parsing and generating text. Copyright (C) 1996-1997, 1999-2002 Cédric Lemaire This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA To contact the author: codeworker@free.fr */ #ifndef _ExprScriptBinaryExpression_h_ #define _ExprScriptBinaryExpression_h_ #include "ExprScriptExpression.h" namespace CodeWorker { class ExprScriptBinaryExpression : public ExprScriptExpression { private: ExprScriptExpression* _pLeft; ExprScriptExpression* _pRight; public: ExprScriptBinaryExpression(ExprScriptExpression* pLeft, ExprScriptExpression* pRight) : _pLeft(pLeft), _pRight(pRight) {} virtual ~ExprScriptBinaryExpression(); inline ExprScriptExpression* getLeft() const { return _pLeft; } inline ExprScriptExpression* getRight() const { return _pRight; } virtual std::string getValue(DtaScriptVariable& visibility) const = 0; }; class ExprScriptConcatenation : public ExprScriptBinaryExpression { public: ExprScriptConcatenation(ExprScriptExpression* pLeft, ExprScriptExpression* pRight) : ExprScriptBinaryExpression(pLeft, pRight) {} virtual ~ExprScriptConcatenation(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual std::string toString() const; virtual EXPRESSION_RETURN_TYPE compileCpp(CppCompilerEnvironment& theCompilerEnvironment) const; virtual bool compileCppString(CppCompilerEnvironment& theCompilerEnvironment) const; }; class ExprScriptArithmetic : public ExprScriptBinaryExpression { private: char _cOperator; public: ExprScriptArithmetic(ExprScriptExpression* pLeft, ExprScriptExpression* pRight, char cOperator) : ExprScriptBinaryExpression(pLeft, pRight), _cOperator(cOperator) {} virtual ~ExprScriptArithmetic(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual int getIntValue(DtaScriptVariable& visibility) const; virtual double getDoubleValue(DtaScriptVariable& visibility) const; virtual std::string toString() const; virtual EXPRESSION_RETURN_TYPE compileCpp(CppCompilerEnvironment& theCompilerEnvironment) const; virtual bool compileCppDouble(CppCompilerEnvironment& theCompilerEnvironment) const; }; class ExprScriptShift : public ExprScriptBinaryExpression { private: char _cOperator; public: ExprScriptShift(ExprScriptExpression* pLeft, ExprScriptExpression* pRight, char cOperator) : ExprScriptBinaryExpression(pLeft, pRight), _cOperator(cOperator) {} virtual ~ExprScriptShift(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual int getIntValue(DtaScriptVariable& visibility) const; virtual std::string toString() const; virtual EXPRESSION_RETURN_TYPE compileCpp(CppCompilerEnvironment& theCompilerEnvironment) const; virtual bool compileCppInt(CppCompilerEnvironment& theCompilerEnvironment) const; }; class ExprScriptComparison : public ExprScriptBinaryExpression { protected: char _cOperator; public: ExprScriptComparison(ExprScriptExpression* pLeft, ExprScriptExpression* pRight, char cOperator) : ExprScriptBinaryExpression(pLeft, pRight), _cOperator(cOperator) {} virtual ~ExprScriptComparison(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual std::string toString() const; virtual EXPRESSION_RETURN_TYPE compileCpp(CppCompilerEnvironment& theCompilerEnvironment) const; virtual bool compileCppBoolean(CppCompilerEnvironment& theCompilerEnvironment, bool bNegative) const; }; class ExprScriptNumericComparison : public ExprScriptComparison { public: ExprScriptNumericComparison(ExprScriptExpression* pLeft, ExprScriptExpression* pRight, char cOperator) : ExprScriptComparison(pLeft, pRight, cOperator) {} virtual ~ExprScriptNumericComparison(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual std::string toString() const; virtual bool compileCppBoolean(CppCompilerEnvironment& theCompilerEnvironment, bool bNegative) const; }; class ExprScriptTernaryOperator : public ExprScriptBinaryExpression { protected: ExprScriptExpression* _pCondition; public: ExprScriptTernaryOperator(ExprScriptExpression* pCondition, ExprScriptExpression* pLeft, ExprScriptExpression* pRight) : ExprScriptBinaryExpression(pLeft, pRight), _pCondition(pCondition) {} virtual ~ExprScriptTernaryOperator(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual std::string toString() const; virtual EXPRESSION_RETURN_TYPE compileCpp(CppCompilerEnvironment& theCompilerEnvironment) const; virtual bool compileCppString(CppCompilerEnvironment& theCompilerEnvironment) const; }; class ExprScriptBoolean : public ExprScriptBinaryExpression { protected: char _cOperator; public: ExprScriptBoolean(ExprScriptExpression* pLeft, ExprScriptExpression* pRight, char cOperator) : ExprScriptBinaryExpression(pLeft, pRight), _cOperator(cOperator) {} virtual ~ExprScriptBoolean(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual std::string toString() const; virtual EXPRESSION_RETURN_TYPE compileCpp(CppCompilerEnvironment& theCompilerEnvironment) const; virtual bool compileCppBoolean(CppCompilerEnvironment& theCompilerEnvironment, bool bNegative) const; }; class ExprScriptInSet : public ExprScriptExpression { private: ExprScriptExpression* _pLeft; std::set _listOfConstants; public: ExprScriptInSet(ExprScriptExpression* pLeft, const std::set& listOfConstants) : _pLeft(pLeft), _listOfConstants(listOfConstants) {} virtual ~ExprScriptInSet(); virtual std::string getValue(DtaScriptVariable& visibility) const; virtual EXPRESSION_RETURN_TYPE compileCpp(CppCompilerEnvironment& theCompilerEnvironment) const; virtual std::string toString() const; }; } #endif