|
|
@ -313,34 +313,35 @@ namespace storm { |
|
|
|
|
|
|
|
void Smt2SmtSolver::checkForErrorMessage(const std::string message){ |
|
|
|
size_t errorOccurrance = message.find("error"); |
|
|
|
if (errorOccurrance!=std::string::npos){ |
|
|
|
//do not throw an exception for timeout or memout errors
|
|
|
|
if(message.find("timeout")!=std::string::npos){ |
|
|
|
STORM_LOG_INFO("SMT solver answered: '" << message << "' and I am interpreting this as timeout "); |
|
|
|
this->needsRestart=true; |
|
|
|
//do not throw an exception for timeout or memout errors
|
|
|
|
if(message.find("timeout")!=std::string::npos){ |
|
|
|
STORM_LOG_INFO("SMT solver answered: '" << message << "' and I am interpreting this as timeout "); |
|
|
|
} |
|
|
|
else if(message.find("memory")!=std::string::npos){ |
|
|
|
STORM_LOG_INFO("SMT solver answered: '" << message << "' and I am interpreting this as out of memory "); |
|
|
|
this->processIdOfSolver=0; |
|
|
|
} |
|
|
|
else{ |
|
|
|
std::string errorMsg = "An error was detected while checking the solver output. "; |
|
|
|
STORM_LOG_DEBUG("Detected an error message in the solver response:\n" + message); |
|
|
|
size_t firstQuoteSign = message.find('\"',errorOccurrance); |
|
|
|
if(firstQuoteSign!=std::string::npos && message.find("\\\"", firstQuoteSign-1)!=firstQuoteSign-1){ |
|
|
|
size_t secondQuoteSign = message.find('\"', firstQuoteSign+1); |
|
|
|
while(secondQuoteSign!=std::string::npos && message.find("\\\"", secondQuoteSign-1)==secondQuoteSign-1){ |
|
|
|
secondQuoteSign = message.find('\"',secondQuoteSign+1); |
|
|
|
} |
|
|
|
if(secondQuoteSign!=std::string::npos){ |
|
|
|
errorMsg += "The error message was: <<" + message.substr(errorOccurrance,secondQuoteSign-errorOccurrance+1) + ">>."; |
|
|
|
STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, errorMsg); |
|
|
|
return; |
|
|
|
} |
|
|
|
this->processIdOfSolver=0; |
|
|
|
} |
|
|
|
else if(message.find("memory")!=std::string::npos){ |
|
|
|
STORM_LOG_INFO("SMT solver answered: '" << message << "' and I am interpreting this as out of memory "); |
|
|
|
this->needsRestart=true; |
|
|
|
this->processIdOfSolver=0; |
|
|
|
} |
|
|
|
else if(errorOccurrance!=std::string::npos){ |
|
|
|
this->needsRestart=true; |
|
|
|
std::string errorMsg = "An error was detected while checking the solver output. "; |
|
|
|
STORM_LOG_DEBUG("Detected an error message in the solver response:\n" + message); |
|
|
|
size_t firstQuoteSign = message.find('\"',errorOccurrance); |
|
|
|
if(firstQuoteSign!=std::string::npos && message.find("\\\"", firstQuoteSign-1)!=firstQuoteSign-1){ |
|
|
|
size_t secondQuoteSign = message.find('\"', firstQuoteSign+1); |
|
|
|
while(secondQuoteSign!=std::string::npos && message.find("\\\"", secondQuoteSign-1)==secondQuoteSign-1){ |
|
|
|
secondQuoteSign = message.find('\"',secondQuoteSign+1); |
|
|
|
} |
|
|
|
if(secondQuoteSign!=std::string::npos){ |
|
|
|
errorMsg += "The error message was: <<" + message.substr(errorOccurrance,secondQuoteSign-errorOccurrance+1) + ">>."; |
|
|
|
STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, errorMsg); |
|
|
|
return; |
|
|
|
} |
|
|
|
errorMsg += "The error message could not be parsed correctly. Snippet:\n" + message.substr(errorOccurrance,200); |
|
|
|
STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, errorMsg); |
|
|
|
} |
|
|
|
errorMsg += "The error message could not be parsed correctly. Snippet:\n" + message.substr(errorOccurrance,200); |
|
|
|
STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, errorMsg); |
|
|
|
} |
|
|
|
} |
|
|
|
} |