summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/expressions.hpp12
-rw-r--r--include/simplifier.hpp36
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);