summaryrefslogtreecommitdiff
path: root/expression_base.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'expression_base.cpp')
-rw-r--r--expression_base.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/expression_base.cpp b/expression_base.cpp
new file mode 100644
index 0000000..534e4f4
--- /dev/null
+++ b/expression_base.cpp
@@ -0,0 +1,76 @@
+/* PIA - Lenguajes Modernos de Programación
+ * FACULTAD DE CIENCIAS FÍSICO MATEMÁTICAS
+ * Luis Sebastián Martínez Vega - LCC */
+
+#include <string>
+#include "include/expressions.hpp"
+#include "include/lexer.hpp"
+
+using std::string;
+
+Expression::Expression(Expression *left, Expression *right, token_type type)
+ : left(left), right(right), type(type) {}
+
+Expression::~Expression() {
+ delTree();
+}
+
+const Expression *Expression::getLeft() {
+ return left;
+}
+
+const Expression *Expression::getRight() {
+ return right;
+}
+
+string Expression::getRepr() {
+ if(repr.empty())
+ setRepr();
+
+ return repr;
+}
+
+void Expression::setRepr() {
+ repr += '(';
+
+ if(getLeft() != NULL)
+ repr += left->getRepr();
+
+ switch(type) {
+ case sum:
+ repr += '+';
+
+ break;
+ case substraction:
+ repr += '-';
+
+ break;
+ case multiplication:
+ repr += '*';
+
+ break;
+ case division:
+ repr += '/';
+
+ break;
+ case power:
+ repr += '^';
+
+ break;
+ }
+
+ if(getRight() != NULL)
+ repr += right->getRepr();
+
+ repr += ')';
+}
+
+void Expression::delTree() {
+ if(getLeft() != NULL)
+ delete left;
+
+ if(getRight() != NULL)
+ delete right;
+
+ delete this;
+}