diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/exceptions.h | 7 | ||||
-rw-r--r-- | src/nodes.cc | 18 |
2 files changed, 6 insertions, 19 deletions
diff --git a/src/exceptions.h b/src/exceptions.h index b17f424..1408603 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -17,13 +17,6 @@ class operator_exception: public std::exception { } }; -class divide_exception: public std::exception { - virtual const char* what() const throw() - { - return "A divison through zero had to be prevented by the parser - check your input term."; - } -}; - class identifier_exception: public std::exception { virtual const char* what() const throw() { diff --git a/src/nodes.cc b/src/nodes.cc index 283b583..256a609 100644 --- a/src/nodes.cc +++ b/src/nodes.cc @@ -30,29 +30,23 @@ OperatorNode::OperatorNode(TokenType token): double OperatorNode::solve() const { switch ( this->operator_ ) { - case TokenType::OPERATOR_MULTIPLY: { - return this->leftChild->solve() * this->rightChild->solve(); - } case TokenType::OPERATOR_PLUS: { return this->leftChild->solve() + this->rightChild->solve(); } case TokenType::OPERATOR_MINUS: { return this->leftChild->solve() - this->rightChild->solve(); } + case TokenType::OPERATOR_MULTIPLY: { + return this->leftChild->solve() * this->rightChild->solve(); + } + case TokenType::OPERATOR_DIVIDE: { + return this->leftChild->solve() / this->rightChild->solve(); + } case TokenType::OPERATOR_POWER: { return std::pow( this->leftChild->solve(), this->rightChild->solve() ); } - case TokenType::OPERATOR_DIVIDE: { - const double rightChild{ this->rightChild->solve() }; - - if ( rightChild != 0 ) { - return this->leftChild->solve() / rightChild; - } else { - throw divide_exception(); - } - } default: { throw operator_exception(); } |