diff options
author | HombreLaser <sebastian-440@live.com> | 2022-04-03 16:42:07 -0500 |
---|---|---|
committer | HombreLaser <sebastian-440@live.com> | 2022-04-03 16:42:07 -0500 |
commit | 643e33711781fb5a2a3ffc1b8b4b0031bf9509a1 (patch) | |
tree | 59b3f668a8e06b399dbdf5348948914c6b8ecb15 /expression_base.cpp | |
parent | e078309c096fd5091df3006775db56e2a1c62e8b (diff) |
Añadido código de las expresiones.
Diffstat (limited to 'expression_base.cpp')
-rw-r--r-- | expression_base.cpp | 76 |
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; +} |