diff options
author | HombreLaser <sebastian-440@live.com> | 2022-04-16 13:22:31 -0500 |
---|---|---|
committer | HombreLaser <sebastian-440@live.com> | 2022-04-16 13:22:31 -0500 |
commit | 4a2d657cc5bf8ea685a0daaec803363bc2c7822c (patch) | |
tree | 454d831c4f12499691c779e40b1f9f2638bb8dc9 /include/expressions.hpp | |
parent | e0957d3990c5c592bf19883054505d82e9d8096f (diff) |
Añadida implementación dle diferenciados.
Diffstat (limited to 'include/expressions.hpp')
-rw-r--r-- | include/expressions.hpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/include/expressions.hpp b/include/expressions.hpp index b7a2921..3191436 100644 --- a/include/expressions.hpp +++ b/include/expressions.hpp @@ -2,10 +2,10 @@ * FACULTAD DE CIENCIAS FÍSICO MATEMÁTICAS * Luis Sebastián Martínez Vega - LCC */ -#include <string> -#include "lexer.hpp" #ifndef EXPRESSIONS_H #define EXPRESSIONS_H +#include <string> +#include "lexer.hpp" /* Debido a que en eval() llamamos a la respectiva función trigonométrica, hay un conflicto entre @@ -23,14 +23,18 @@ enum trig_functions { i_ctg }; +class Differentiator; // Forward declaration. + class Expression { public: Expression(Expression *left, Expression *right, token_type type); virtual ~Expression() = default; std::string getRepr(); - const Expression *getLeft(); - const Expression *getRight(); + Expression *diff(const Differentiator *d); + Expression *getLeft(); + Expression *getRight(); virtual float eval(int arg) = 0; + virtual Expression *copy() = 0; // Regresa una copia de la expresión actual. protected: Expression *left; Expression *right; @@ -48,6 +52,7 @@ public: ~Literal(); int getValue(); float eval(int arg) override; + Expression *copy() override; protected: void setRepr() override; }; @@ -59,9 +64,10 @@ private: public: Function(Expression *arg, trig_functions name); ~Function(); - const Expression *getArg(); + Expression *getArg(); float eval(int arg) override; - trig_functions getFunctionName(); + trig_functions getFunctionName() const; + Expression *copy() override; protected: void delTree(); void setRepr() override; @@ -74,6 +80,7 @@ public: explicit Variable(char name); ~Variable(); float eval(int arg) override; + Expression *copy() override; protected: void setRepr() override; }; @@ -83,6 +90,7 @@ public: AddExpression(Expression *left, Expression *right); ~AddExpression(); float eval(int arg) override; + Expression *copy() override; }; class SubExpression : public Expression { @@ -90,6 +98,7 @@ public: SubExpression(Expression *left, Expression *right); ~SubExpression(); float eval(int arg) override; + Expression *copy() override; }; class NegationExpression : public Expression { @@ -97,6 +106,7 @@ public: explicit NegationExpression(Expression *right); ~NegationExpression(); float eval(int arg) override; + Expression *copy() override; protected: void setRepr() override; }; @@ -106,6 +116,7 @@ public: DivisionExpression(Expression *left, Expression *right); ~DivisionExpression(); float eval(int arg) override; + Expression *copy() override; }; class MultiplicationExpression : public Expression { @@ -113,6 +124,7 @@ public: MultiplicationExpression(Expression *left, Expression *right); ~MultiplicationExpression(); float eval(int arg) override; + Expression *copy() override; }; class PowerExpression : public Expression { @@ -120,6 +132,7 @@ public: PowerExpression(Expression *left, Expression *right); ~PowerExpression(); float eval(int arg) override; + Expression *copy() override; }; #endif /* EXPRESSIONS_H */ |