| 
					
					
						
							
						
					
					
				 | 
				@ -313,34 +313,35 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				         | 
				 | 
				 | 
				         | 
			
		
		
	
		
			
				 | 
				 | 
				        void Smt2SmtSolver::checkForErrorMessage(const std::string message){ | 
				 | 
				 | 
				        void Smt2SmtSolver::checkForErrorMessage(const std::string message){ | 
			
		
		
	
		
			
				 | 
				 | 
				            size_t errorOccurrance = message.find("error"); | 
				 | 
				 | 
				            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; | 
				 | 
				 | 
				                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); | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				    } | 
				 | 
				 | 
				    } |