aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2014-09-26 22:51:49 +0200
committerAdrian Kummerlaender2014-09-26 22:51:49 +0200
commita0b3e97d555ee504636c06fd3a72983b95c3bfb6 (patch)
treed0c8921a9f95ac555307c9a751ba5c6792dd95eb
parent3aad19966f81189219d00d0ea905b6b1e83d5576 (diff)
downloadSimpleParser-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
-rw-r--r--src/exceptions.h7
-rw-r--r--src/nodes.cc18
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();
}