diff options
author | HombreLaser <sebastian-440@live.com> | 2022-04-21 11:05:39 -0500 |
---|---|---|
committer | HombreLaser <sebastian-440@live.com> | 2022-04-21 11:05:39 -0500 |
commit | c88da3e10da5ddac6eca479e3bcac8e3b26d86fa (patch) | |
tree | f0b5e451eb0fcab82f23a24963eb64b51692f31e /include | |
parent | e72326081fe216b207e8cfa94e8db5c6d6de19dc (diff) |
Añadidas reglas de simplificación
Diffstat (limited to 'include')
-rw-r--r-- | include/expressions.hpp | 23 | ||||
-rw-r--r-- | include/simplifier.hpp | 6 |
2 files changed, 19 insertions, 10 deletions
diff --git a/include/expressions.hpp b/include/expressions.hpp index a293408..604801d 100644 --- a/include/expressions.hpp +++ b/include/expressions.hpp @@ -24,6 +24,7 @@ enum trig_functions { }; class Differentiator; // Forward declaration +class Simplifier; class Expression { public: @@ -31,9 +32,11 @@ public: virtual ~Expression() = default; std::string getRepr(); virtual Expression *diff(const Differentiator *d) = 0; + template <class E> + Expression *simplify(E *expr, const Simplifier *s); Expression *getLeft(); Expression *getRight(); - virtual float eval(int arg) = 0; + virtual float eval(int arg=0) = 0; virtual Expression *copy() = 0; // Regresa una copia de la expresión actual. protected: Expression *left; @@ -51,7 +54,7 @@ public: explicit Literal(int value); ~Literal(); int getValue(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *diff(const Differentiator *d) override; Expression *copy() override; protected: @@ -66,7 +69,7 @@ public: Function(Expression *arg, trig_functions name); ~Function(); Expression *getArg(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *diff(const Differentiator *d) override; trig_functions getFunctionName() const; Expression *copy() override; @@ -81,7 +84,7 @@ private: public: explicit Variable(char name); ~Variable(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *diff(const Differentiator *d) override; Expression *copy() override; protected: @@ -92,7 +95,7 @@ class AddExpression : public Expression { public: AddExpression(Expression *left, Expression *right); ~AddExpression(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *diff(const Differentiator *d) override; Expression *copy() override; }; @@ -101,7 +104,7 @@ class SubExpression : public Expression { public: SubExpression(Expression *left, Expression *right); ~SubExpression(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; }; @@ -110,7 +113,7 @@ class NegationExpression : public Expression { public: explicit NegationExpression(Expression *right); ~NegationExpression(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; protected: @@ -121,7 +124,7 @@ class DivisionExpression : public Expression { public: DivisionExpression(Expression *left, Expression *right); ~DivisionExpression(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; }; @@ -130,7 +133,7 @@ class MultiplicationExpression : public Expression { public: MultiplicationExpression(Expression *left, Expression *right); ~MultiplicationExpression(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; }; @@ -139,7 +142,7 @@ class PowerExpression : public Expression { public: PowerExpression(Expression *left, Expression *right); ~PowerExpression(); - float eval(int arg) override; + float eval(int arg=0) override; Expression *copy() override; Expression *diff(const Differentiator *d) override; }; diff --git a/include/simplifier.hpp b/include/simplifier.hpp index 948c569..dcc3225 100644 --- a/include/simplifier.hpp +++ b/include/simplifier.hpp @@ -1,3 +1,7 @@ +/* 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" @@ -5,12 +9,14 @@ 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); |