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