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