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"),formulaContext,"Operand of operator "+opstring)};
return{parseFormula(propertyStructure.at("exp"),formulaContext,globalVars,constants,"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"),formulaContext,"Operand of operator "+opstring),parseFormula(propertyStructure.at("right"),formulaContext,"Operand of operator "+opstring)};
return{parseFormula(propertyStructure.at("left"),formulaContext,globalVars,constants,"Operand of operator "+opstring),parseFormula(propertyStructure.at("right"),formulaContext,globalVars,constants,"Operand of operator "+opstring)};
STORM_LOG_THROW(propertyStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting reward-expression for operator "<<opString<<" in "<<context);
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,{},{});
storm::expressions::ExpressionrewExpr=parseExpression(propertyStructure.at("exp"),"Reward expression in "+context,globalVars,constants);
if(rewExpr.isVariable()){
if(rewExpr.isVariable()){
time=false;
time=false;
}else{
}else{
@ -237,7 +237,7 @@ namespace storm {
}
}
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=std::make_shared<storm::logic::EventuallyFormula>(parseFormula(propertyStructure.at("reach"),time?storm::logic::FormulaContext::Time:storm::logic::FormulaContext::Reward,"Reach-expression of operator "+opString));
reach=std::make_shared<storm::logic::EventuallyFormula>(parseFormula(propertyStructure.at("reach"),time?storm::logic::FormulaContext::Time:storm::logic::FormulaContext::Reward,globalVars,constants,"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");
}
}
@ -263,7 +263,7 @@ namespace storm {
if(propertyStructure.count("step-instant")>0){
if(propertyStructure.count("step-instant")>0){
storm::expressions::ExpressionstepInstantExpr=parseExpression(propertyStructure.at("step-instant"),"Step instant in "+context,{},{});
storm::expressions::ExpressionstepInstantExpr=parseExpression(propertyStructure.at("step-instant"),"Step instant in "+context,globalVars,constants);
STORM_LOG_THROW(!stepInstantExpr.containsVariables(),storm::exceptions::NotSupportedException,"storm only allows constant step-instants");
STORM_LOG_THROW(!stepInstantExpr.containsVariables(),storm::exceptions::NotSupportedException,"storm only allows constant step-instants");
std::vector<std::shared_ptr<storm::logic::Formulaconst>>args=parseUnaryFormulaArgument(propertyStructure,formulaContext,opString,"Subformula of globally operator "+context);
std::vector<std::shared_ptr<storm::logic::Formulaconst>>args=parseUnaryFormulaArgument(propertyStructure,formulaContext,opString,globalVars,constants,"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");
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"),storm::logic::FormulaContext::Undefined,"Values of property "+name);
autoformula=parseFormula(expressionStructure.at("values"),storm::logic::FormulaContext::Undefined,globalVars,constants,"Values of property "+name);