/* PIA - Lenguajes Modernos de Programación * FACULTAD DE CIENCIAS FÍSICO MATEMÁTICAS * Luis Sebastián Martínez Vega - LCC */ #include #include "lexer.hpp" #ifndef EXPRESSIONS_H #define EXPRESSIONS_H enum trig_functions { sin, cos, tan, csc, sec, ctg }; class Expression { private: Expression *left; Expression *right; token_type type; public: Expression(Expression *left, Expression *right, token_type type); virtual ~Expression() = 0; std::string getRepr(); const Expression *getLeft(); const Expression *getRight(); protected: virtual void setRepr(); void delTree(); std::string repr{}; }; class Literal : public Expression { private: int value; public: Literal(int value); ~Literal(); int getValue(); void setRepr() override; }; class Function : public Expression { private: trig_functions function_name; Expression *arg; public: Function(Expression *arg, trig_functions name); ~Function(); trig_functions getFunctionName(); void setRepr() override; protected: void delTree(); }; class Variable : public Expression { private: char name; public: Variable(char name); ~Variable(); void setRepr() override; }; class AddExpression : public Expression { public: AddExpression(Expression *left, Expression *right); ~AddExpression(); }; class SubExpression : public Expression { public: SubExpression(Expression *left, Expression *right); ~SubExpression(); }; class NegationExpression : public Expression { public: NegationExpression(Expression *right); ~NegationExpression(); }; class DivisionExpression : public Expression { public: DivisionExpression(Expression *left, Expression *right); ~DivisionExpression(); }; class MultiplicationExpression : public Expression { public: MultiplicationExpression(Expression *left, Expression *right); ~MultiplicationExpression(); }; class PowerExpression : public Expression { public: PowerExpression(Expression *left, Expression *right); ~PowerExpression(); }; #endif /* EXPRESSIONS_H */