diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/expressions.hpp | 12 | ||||
-rw-r--r-- | include/simplifier.hpp | 36 |
2 files changed, 28 insertions, 20 deletions
diff --git a/include/expressions.hpp b/include/expressions.hpp index 604801d..2dcf67c 100644 --- a/include/expressions.hpp +++ b/include/expressions.hpp @@ -32,8 +32,7 @@ public: virtual ~Expression() = default; std::string getRepr(); virtual Expression *diff(const Differentiator *d) = 0; - template <class E> - Expression *simplify(E *expr, const Simplifier *s); + virtual Expression *simplify(const Simplifier *s) = 0; Expression *getLeft(); Expression *getRight(); virtual float eval(int arg=0) = 0; @@ -55,6 +54,7 @@ public: ~Literal(); int getValue(); float eval(int arg=0) override; + Expression *simplify(const Simplifier *s) override; Expression *diff(const Differentiator *d) override; Expression *copy() override; protected: @@ -70,6 +70,7 @@ public: ~Function(); Expression *getArg(); float eval(int arg=0) override; + Expression *simplify(const Simplifier *s) override; Expression *diff(const Differentiator *d) override; trig_functions getFunctionName() const; Expression *copy() override; @@ -85,6 +86,7 @@ public: explicit Variable(char name); ~Variable(); float eval(int arg=0) override; + Expression *simplify(const Simplifier *s) override; Expression *diff(const Differentiator *d) override; Expression *copy() override; protected: @@ -97,6 +99,7 @@ public: ~AddExpression(); float eval(int arg=0) override; Expression *diff(const Differentiator *d) override; + Expression *simplify(const Simplifier *s) override; Expression *copy() override; }; @@ -107,6 +110,7 @@ public: float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; + Expression *simplify(const Simplifier *s) override; }; class NegationExpression : public Expression { @@ -116,6 +120,7 @@ public: float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; + Expression *simplify(const Simplifier *s) override; protected: void setRepr() override; }; @@ -127,6 +132,7 @@ public: float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; + Expression *simplify(const Simplifier *s) override; }; class MultiplicationExpression : public Expression { @@ -136,6 +142,7 @@ public: float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; + Expression *simplify(const Simplifier *s) override; }; class PowerExpression : public Expression { @@ -145,6 +152,7 @@ public: float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; + Expression *simplify(const Simplifier *s) override; }; #endif /* EXPRESSIONS_H */ diff --git a/include/simplifier.hpp b/include/simplifier.hpp index dcc3225..e08f951 100644 --- a/include/simplifier.hpp +++ b/include/simplifier.hpp @@ -8,25 +8,25 @@ 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); + 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); - 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 *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); |