#ifndef EXPRESSION_H #define EXPRESSION_H #include #include #include #include // an enumeration for the supported operators enum Operator { PLUS, MINUS, MULTIPLY, DIVIDE }; // converts a symbol +, -, * or / into an Operator Operator to_operator(const std::string& s); // thrown by to_operator for a symbol that is not recognised class BadOperatorSymbol { }; // base class for expression types representing rules in the grammar class Expression { public: virtual int eval() const = 0; virtual ~Expression(); }; typedef boost::shared_ptr ExpressionPtr; typedef std::vector, Operator> > ExpressionVector; // represents in the grammar class AddExpression : public Expression { private: ExpressionPtr first; ExpressionVector expr; public: AddExpression(ExpressionPtr f, ExpressionVector e); virtual int eval() const; }; // represents in the grammar class MultExpression : public Expression { private: ExpressionPtr first; ExpressionVector expr; public: MultExpression(ExpressionPtr f, ExpressionVector e); virtual int eval() const; }; // represents in the grammar class IntegerExpression : public Expression { private: int value; public: IntegerExpression(int v); virtual int eval() const; }; #endif