diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/differentiator.hpp | 20 | ||||
-rw-r--r-- | include/expressions.hpp | 13 | ||||
-rw-r--r-- | include/parser.hpp | 8 |
3 files changed, 26 insertions, 15 deletions
diff --git a/include/differentiator.hpp b/include/differentiator.hpp index f14f2d5..cef5211 100644 --- a/include/differentiator.hpp +++ b/include/differentiator.hpp @@ -14,15 +14,17 @@ private: Expression *ptr; public: Differentiator(); - Expression *visit(Literal *expr); - Expression *visit(Variable *expr); - Expression *visit(Function *expr); - Expression *visit(NegationExpression *expr); - Expression *visit(AddExpression *expr); - Expression *visit(SubExpression *expr); - Expression *visit(DivisionExpression *expr); - Expression *visit(MultiplicationExpression *expr); - Expression *visit(PowerExpression *expr); + Expression *visit(Literal *expr) const; + Expression *visit(Variable *expr) const; + Expression *visit(Function *expr) const; + Expression *visit(NegationExpression *expr) const; + Expression *visit(AddExpression *expr) const; + Expression *visit(SubExpression *expr) const; + Expression *visit(DivisionExpression *expr) const; + Expression *visit(MultiplicationExpression *expr) const; + Expression *visit(PowerExpression *expr) const; }; +Expression *deriv(Expression *to_deriv); + #endif /* DIFFERENTIATOR_H */ diff --git a/include/expressions.hpp b/include/expressions.hpp index 3191436..a293408 100644 --- a/include/expressions.hpp +++ b/include/expressions.hpp @@ -23,14 +23,14 @@ enum trig_functions { i_ctg }; -class Differentiator; // Forward declaration. +class Differentiator; // Forward declaration class Expression { public: Expression(Expression *left, Expression *right, token_type type); virtual ~Expression() = default; std::string getRepr(); - Expression *diff(const Differentiator *d); + virtual Expression *diff(const Differentiator *d) = 0; Expression *getLeft(); Expression *getRight(); virtual float eval(int arg) = 0; @@ -52,6 +52,7 @@ public: ~Literal(); int getValue(); float eval(int arg) override; + Expression *diff(const Differentiator *d) override; Expression *copy() override; protected: void setRepr() override; @@ -66,6 +67,7 @@ public: ~Function(); Expression *getArg(); float eval(int arg) override; + Expression *diff(const Differentiator *d) override; trig_functions getFunctionName() const; Expression *copy() override; protected: @@ -80,6 +82,7 @@ public: explicit Variable(char name); ~Variable(); float eval(int arg) override; + Expression *diff(const Differentiator *d) override; Expression *copy() override; protected: void setRepr() override; @@ -90,6 +93,7 @@ public: AddExpression(Expression *left, Expression *right); ~AddExpression(); float eval(int arg) override; + Expression *diff(const Differentiator *d) override; Expression *copy() override; }; @@ -99,6 +103,7 @@ public: ~SubExpression(); float eval(int arg) override; Expression *copy() override; + Expression *diff(const Differentiator *d) override; }; class NegationExpression : public Expression { @@ -107,6 +112,7 @@ public: ~NegationExpression(); float eval(int arg) override; Expression *copy() override; + Expression *diff(const Differentiator *d) override; protected: void setRepr() override; }; @@ -117,6 +123,7 @@ public: ~DivisionExpression(); float eval(int arg) override; Expression *copy() override; + Expression *diff(const Differentiator *d) override; }; class MultiplicationExpression : public Expression { @@ -125,6 +132,7 @@ public: ~MultiplicationExpression(); float eval(int arg) override; Expression *copy() override; + Expression *diff(const Differentiator *d) override; }; class PowerExpression : public Expression { @@ -133,6 +141,7 @@ public: ~PowerExpression(); float eval(int arg) override; Expression *copy() override; + Expression *diff(const Differentiator *d) override; }; #endif /* EXPRESSIONS_H */ diff --git a/include/parser.hpp b/include/parser.hpp index 567ef03..a4e11af 100644 --- a/include/parser.hpp +++ b/include/parser.hpp @@ -5,7 +5,7 @@ #ifndef PARSER_H #define PARSER_H #include <string> -#include <vector> +#include <deque> #include "expressions.hpp" #include "lexer.hpp" @@ -13,11 +13,11 @@ class Parser{ private: std::string text; Lexer tokenizer; - std::vector<Expression *> tree_stack; + std::deque<Expression *> tree_queue; Token var{nil, "{}"}; void panic(); - Expression *popStack(); - Expression *newTree(token_type type); + Expression *popQueue(); + Expression *newTree(token_type type, Expression *left, Expression *right); void setText(std::string text); void parseExpr(); void parsePrimeExpr(); |