aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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();
}