/* PIA - Lenguajes Modernos de Programación * FACULTAD DE CIENCIAS FÍSICO MATEMÁTICAS * Luis Sebastián Martínez Vega - LCC */ #ifndef SIMPLIFIER_H #define SIMPLIFIER_H #include "expressions.hpp" class Simplifier { private: void simplifyChildren(Expression *root, Expression **left, Expression **right) const; Expression *ruleEval(Expression *expr) const; Expression *ruleMultiplyByOne(MultiplicationExpression *expr) const; Expression *ruleDivideByOne(DivisionExpression *expr) const; Expression *ruleMultiplyByZero(MultiplicationExpression *expr) const; Expression *ruleZeroDivision(DivisionExpression *expr) const; Expression *ruleOnePower(PowerExpression *expr) const; Expression *ruleZeroPower(PowerExpression *expr) const; Expression *addSubstractZero(Expression *expr) const; public: Expression *visit(Variable *expr) const; Expression *visit(Literal *expr) const; Expression *visit(Function *expr) const; Expression *visit(NegationExpression *expr) const; Expression *visit(AddExpression *expr) const; Expression *visit(SubExpression *expr) const; Expression *visit(MultiplicationExpression *expr) const; Expression *visit(DivisionExpression *expr) const; Expression *visit(PowerExpression *expr) const; }; Expression *simplify(Expression *to_simplify); #endif /* SIMPLIFIER_H */