#include "nodes.h" #include "exceptions.h" #include #include #include namespace SimpleParser { OperandNode::OperandNode(double val) { this->value_ = val; } double OperandNode::solve() { return this->value_; } NodeType OperandNode::getType() { return OPERAND_NODE; } std::string OperandNode::print() { std::stringstream convertStream; convertStream.precision(std::numeric_limits::digits10); convertStream << this->value_; return convertStream.str(); } OperatorNode::OperatorNode(char op) { this->function_ = op; } double OperatorNode::solve() { switch ( this->function_ ) { case '*': { return this->leftChild->solve() * this->rightChild->solve(); } case '/': { double rightChild = this->rightChild->solve(); if ( rightChild != 0 ) { return this->leftChild->solve() / rightChild; } else { throw divide_exception(); } } case '+': { return this->leftChild->solve() + this->rightChild->solve(); } case '-': { return this->leftChild->solve() - this->rightChild->solve(); } case '^': { return std::pow( this->leftChild->solve(), this->rightChild->solve() ); } default: { throw operator_exception(); } } } NodeType OperatorNode::getType() { return OPERATOR_NODE; } std::string OperatorNode::print() { return std::string(1, this->function_); } char OperatorNode::getFunction() { return this->function_; } }