diff options
author | Adrian Kummerlaender | 2014-09-26 22:51:49 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2014-09-26 22:51:49 +0200 |
commit | a0b3e97d555ee504636c06fd3a72983b95c3bfb6 (patch) | |
tree | d0c8921a9f95ac555307c9a751ba5c6792dd95eb /src | |
parent | 3aad19966f81189219d00d0ea905b6b1e83d5576 (diff) | |
download | SimpleParser-a0b3e97d555ee504636c06fd3a72983b95c3bfb6.tar SimpleParser-a0b3e97d555ee504636c06fd3a72983b95c3bfb6.tar.gz SimpleParser-a0b3e97d555ee504636c06fd3a72983b95c3bfb6.tar.bz2 SimpleParser-a0b3e97d555ee504636c06fd3a72983b95c3bfb6.tar.lz SimpleParser-a0b3e97d555ee504636c06fd3a72983b95c3bfb6.tar.xz SimpleParser-a0b3e97d555ee504636c06fd3a72983b95c3bfb6.tar.zst SimpleParser-a0b3e97d555ee504636c06fd3a72983b95c3bfb6.zip |
Eliminated manual division through zero prevention
* while integer division through zero is obviously a low level error that should be prevented, this operation is well-defined for floating point values as used by SimpleParser
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(); } |