From c88da3e10da5ddac6eca479e3bcac8e3b26d86fa Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Thu, 21 Apr 2022 11:05:39 -0500 Subject: Añadidas reglas de simplificación MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/expressions.hpp | 23 +++++++++++++---------- include/simplifier.hpp | 6 ++++++ 2 files changed, 19 insertions(+), 10 deletions(-) (limited to 'include') 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 + 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); -- cgit v1.2.3