summaryrefslogtreecommitdiff
path: root/expressions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'expressions.cpp')
-rw-r--r--expressions.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/expressions.cpp b/expressions.cpp
new file mode 100644
index 0000000..e402020
--- /dev/null
+++ b/expressions.cpp
@@ -0,0 +1,132 @@
+#include <cstddef>
+#include <string>
+#include "include/lexer.hpp"
+#include "include/expressions.hpp"
+
+using std::string, std::to_string;
+
+// Literal
+Literal::Literal(int value) : Expression(NULL, NULL, number) {
+ this->value = value;
+}
+
+Literal::~Literal() {
+ delTree();
+}
+
+void Literal::setRepr() {
+ repr = to_string(value);
+}
+
+// Function.
+Function::Function(Expression *arg, trig_functions name) : Expression(NULL, NULL, function) {
+ this->arg = arg;
+ function_name = name;
+}
+
+Function::~Function() {
+ delTree();
+}
+
+trig_functions Function::getFunctionName() { return function_name; }
+
+void Function::delTree() {
+ delete arg;
+ delete this;
+}
+
+void Function::setRepr() {
+ switch(function_name) {
+ case sin:
+ repr += "sin";
+
+ break;
+ case cos:
+ repr += "cos";
+
+ break;
+ case tan:
+ repr += "tan";
+
+ break;
+ case csc:
+ repr += "csc";
+
+ break;
+ case sec:
+ repr += "sec";
+
+ break;
+ case ctg:
+ repr += "ctg";
+
+ break;
+ }
+
+ repr += '(';
+ repr += arg->getRepr();
+ repr += ')';
+}
+
+// Variable.
+Variable::Variable(char name) : Expression(NULL, NULL, variable) {
+ this->name = name;
+ setRepr();
+}
+
+Variable::~Variable() {
+ delTree();
+}
+
+void Variable::setRepr() {
+ repr += name;
+}
+
+// Sum.
+AddExpression::AddExpression(Expression *left, Expression *right)
+ : Expression(left, right, sum) {}
+
+AddExpression::~AddExpression() {
+ delTree();
+}
+
+// Substraction.
+SubExpression::SubExpression(Expression *left, Expression *right)
+ : Expression(left, right, substraction) {}
+
+SubExpression::~SubExpression() {
+ delTree();
+}
+
+// Negation.
+NegationExpression::NegationExpression(Expression *right)
+ : Expression(NULL, right, substraction) {}
+
+NegationExpression::~NegationExpression() {
+ delTree();
+}
+
+// División.
+DivisionExpression::DivisionExpression(Expression *left, Expression *right)
+ : Expression(left, right, division) {}
+
+DivisionExpression::~DivisionExpression() {
+ delTree();
+}
+
+// Multiplication.
+MultiplicationExpression::MultiplicationExpression(Expression *left,
+ Expression *right)
+ : Expression(left, right, multiplication) {}
+
+MultiplicationExpression::~MultiplicationExpression() {
+ delTree();
+}
+
+// Power.
+PowerExpression::PowerExpression(Expression *left, Expression *right)
+ : Expression(left, right, power) {}
+
+PowerExpression::~PowerExpression() {
+ delTree();
+}