diff options
Diffstat (limited to 'expressions.cpp')
-rw-r--r-- | expressions.cpp | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/expressions.cpp b/expressions.cpp index 72e1e04..6046a9c 100644 --- a/expressions.cpp +++ b/expressions.cpp @@ -4,6 +4,7 @@ #include "include/lexer.hpp" #include "include/expressions.hpp" #include "include/differentiator.hpp" +#include "include/simplifier.hpp" using std::string, std::to_string; @@ -30,6 +31,10 @@ Expression *Literal::diff(const Differentiator *d) { return d->visit(this); } +Expression *Literal::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *Literal::copy() { return new Literal(value); } @@ -56,6 +61,10 @@ Expression *Function::diff(const Differentiator *d) { return d->visit(this); } +Expression *Function::simplify(const Simplifier *s) { + return s->visit(this); +} + void Function::delTree() { delete arg; } @@ -136,6 +145,10 @@ Expression *Variable::diff(const Differentiator *d) { return d->visit(this); } +Expression *Variable::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *Variable::copy() { return new Variable(name); } @@ -159,6 +172,10 @@ Expression *AddExpression::diff(const Differentiator *d) { return d->visit(this); } +Expression *AddExpression::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *AddExpression::copy() { return new AddExpression(left->copy(), right->copy()); } @@ -172,16 +189,20 @@ SubExpression::~SubExpression() { } float SubExpression::eval(int arg) { - float right_val = right->eval(arg); float left_val = left->eval(arg); + float right_val = right->eval(arg); - return right_val - left_val; + return left_val - right_val; } Expression *SubExpression::diff(const Differentiator *d) { return d->visit(this); } +Expression *SubExpression::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *SubExpression::copy() { return new SubExpression(left->copy(), right->copy()); } @@ -209,6 +230,10 @@ Expression *NegationExpression::diff(const Differentiator *d) { return d->visit(this); } +Expression *NegationExpression::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *NegationExpression::copy() { return new NegationExpression(right->copy()); } @@ -232,6 +257,10 @@ Expression *DivisionExpression::diff(const Differentiator *d) { return d->visit(this); } +Expression *DivisionExpression::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *DivisionExpression::copy() { return new DivisionExpression(left->copy(), right->copy()); } @@ -256,6 +285,10 @@ Expression *MultiplicationExpression::diff(const Differentiator *d) { return d->visit(this); } +Expression *MultiplicationExpression::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *MultiplicationExpression::copy() { return new MultiplicationExpression(left->copy(), right->copy()); } @@ -279,6 +312,10 @@ Expression *PowerExpression::diff(const Differentiator *d) { return d->visit(this); } +Expression *PowerExpression::simplify(const Simplifier *s) { + return s->visit(this); +} + Expression *PowerExpression::copy() { return new PowerExpression(left->copy(), right->copy()); } |