STORM_LOG_THROW(propertyStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting operand for operator "<<opstring<<" in "<<context);
STORM_LOG_THROW(propertyStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting operand for operator "<<opstring<<" in "<<context);
return{parseFormula(propertyStructure.at("exp"),"Operand of operator "+opstring)};
return{parseFormula(propertyStructure.at("exp"),formulaContext,"Operand of operator "+opstring)};
STORM_LOG_THROW(propertyStructure.count("left")==1,storm::exceptions::InvalidJaniException,"Expecting left operand for operator "<<opstring<<" in "<<context);
STORM_LOG_THROW(propertyStructure.count("left")==1,storm::exceptions::InvalidJaniException,"Expecting left operand for operator "<<opstring<<" in "<<context);
STORM_LOG_THROW(propertyStructure.count("right")==1,storm::exceptions::InvalidJaniException,"Expecting right operand for operator "<<opstring<<" in "<<context);
STORM_LOG_THROW(propertyStructure.count("right")==1,storm::exceptions::InvalidJaniException,"Expecting right operand for operator "<<opstring<<" in "<<context);
return{parseFormula(propertyStructure.at("left"),"Operand of operator "+opstring),parseFormula(propertyStructure.at("right"),"Operand of operator "+opstring)};
return{parseFormula(propertyStructure.at("left"),formulaContext,"Operand of operator "+opstring),parseFormula(propertyStructure.at("right"),formulaContext,"Operand of operator "+opstring)};
STORM_LOG_THROW(false,storm::exceptions::NotImplementedException,"Forall and Exists are currently not supported");
STORM_LOG_THROW(false,storm::exceptions::NotImplementedException,"Forall and Exists are currently not supported");
}elseif(opString=="Emin"||opString=="Emax"){
}elseif(opString=="Emin"||opString=="Emax"){
booltime=false;
STORM_LOG_THROW(propertyStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting reward-expression for operator "<<opString<<" in "<<context);
storm::expressions::ExpressionrewExpr=parseExpression(propertyStructure.at("exp"),"Reward expression in "+context);
if(rewExpr.isVariable()){
time=false;
}else{
time=true;
}
std::shared_ptr<storm::logic::Formulaconst>reach;
std::shared_ptr<storm::logic::Formulaconst>reach;
if(propertyStructure.count("reach")>0){
if(propertyStructure.count("reach")>0){
reach=parseFormula(propertyStructure.at("reach"),"Reach-expression of operator "+opString);
reach=parseFormula(propertyStructure.at("reach"),time?storm::logic::FormulaContext::Time:storm::logic::FormulaContext::Reward,"Reach-expression of operator "+opString);
}else{
}else{
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Total reward is currently not supported");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Total reward is currently not supported");
STORM_LOG_THROW(propertyStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting reward-expression for operator "<<opString<<" in "<<context);
storm::expressions::ExpressionrewExpr=parseExpression(propertyStructure.at("exp"),"Reward expression in "+context);
boolaccTime=false;
boolaccTime=false;
boolaccSteps=false;
boolaccSteps=false;
if(propertyStructure.count("accumulate")>0){
if(propertyStructure.count("accumulate")>0){
@ -280,8 +292,7 @@ namespace storm {
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Instant/Cumul. Reward for reward constraints not supported currently.");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Instant/Cumul. Reward for reward constraints not supported currently.");
}
}
STORM_LOG_THROW(accTime||accSteps,storm::exceptions::NotSupportedException,"Storm only allows accumulation if a step- or time-bound is given.");
assert(!accTime&&!accSteps);
//STORM_LOG_THROW(!accTime && !accSteps, storm::exceptions::NotSupportedException, "Storm only allows accumulation if a step- or time-bound is given.");
std::vector<std::shared_ptr<storm::logic::Formulaconst>>args=parseUnaryFormulaArgument(propertyStructure,opString,"Subformula of globally operator "+context);
std::vector<std::shared_ptr<storm::logic::Formulaconst>>args=parseUnaryFormulaArgument(propertyStructure,formulaContext,opString,"Subformula of globally operator "+context);
if(propertyStructure.count("step-bounds")>0){
if(propertyStructure.count("step-bounds")>0){
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Globally and step-bounds are not supported currently");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Globally and step-bounds are not supported currently");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"No complex comparisons are allowed.");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"No complex comparisons are allowed.");
@ -465,7 +475,7 @@ namespace storm {
std::stringstatesDescr=getString(expressionStructure.at("states").at("op"),"Filtered states in property named "+name);
std::stringstatesDescr=getString(expressionStructure.at("states").at("op"),"Filtered states in property named "+name);
STORM_LOG_THROW(statesDescr=="initial",storm::exceptions::NotImplementedException,"Only initial states are allowed as set of states we are interested in.");
STORM_LOG_THROW(statesDescr=="initial",storm::exceptions::NotImplementedException,"Only initial states are allowed as set of states we are interested in.");
STORM_LOG_THROW(expressionStructure.count("values")==1,storm::exceptions::InvalidJaniException,"Values as input for a filter must be given");
STORM_LOG_THROW(expressionStructure.count("values")==1,storm::exceptions::InvalidJaniException,"Values as input for a filter must be given");
autoformula=parseFormula(expressionStructure.at("values"),"Values of property "+name);
autoformula=parseFormula(expressionStructure.at("values"),storm::logic::FormulaContext::Undefined,"Values of property "+name);
initVal=parseExpression(variableStructure.at("initial-value"),"Initial value for variable "+name+" (scope: "+scopeDescription+") ");
initVal=parseExpression(variableStructure.at("initial-value"),"Initial value for variable "+name+" (scope: "+scopeDescription+") ");
STORM_LOG_THROW(initVal.get().hasBooleanType(),storm::exceptions::InvalidJaniException,"Initial value for integer variable "+name+"(scope "+scopeDescription+") should be a Boolean");
STORM_LOG_THROW(initVal.get().hasBooleanType(),storm::exceptions::InvalidJaniException,"Initial value for integer variable "+name+"(scope "+scopeDescription+") should be a Boolean");
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename","The name of the file from which to read the JANI input.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build());
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename","The name of the file from which to read the JANI input.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,prismToJaniOptionName,false,"If set, the input PRISM model is transformed to JANI.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,prismToJaniOptionName,false,"If set, the input PRISM model is transformed to JANI.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,fullModelBuildOptionName,false,"If set, include all rewards and labels.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,fullModelBuildOptionName,false,"If set, include all rewards and labels.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,noBuildOptionName,false,"If set, do not build the model.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,explorationOrderOptionName,false,"Sets which exploration order to use.").setShortName(explorationOrderOptionShortName)
this->addOption(storm::settings::OptionBuilder(moduleName,explorationOrderOptionName,false,"Sets which exploration order to use.").setShortName(explorationOrderOptionShortName)