/* 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); Expression *ruleEval(Expression *expr); Expression *ruleMultiplyByOne(MultiplicationExpression *expr); Expression *ruleDivideByOne(DivisionExpression *expr); Expression *ruleMultiplyByZero(MultiplicationExpression *expr); Expression *ruleZeroDivision(DivisionExpression *expr); Expression *ruleOnePower(PowerExpression *expr); Expression *ruleZeroPower(PowerExpression *expr); Expression *addZero(AddExpression *expr); public: Expression *visit(Variable *expr); Expression *visit(Literal *expr); Expression *visit(Function *expr); Expression *visit(NegationExpression *expr); Expression *visit(AddExpression *expr); Expression *visit(SubExpression *expr); Expression *visit(MultiplicationExpression *expr); Expression *visit(DivisionExpression *expr); Expression *visit(PowerExpression *expr); }; Expression *simplify(Expression *to_simplify); #endif /* SIMPLIFIER_H */