@ -212,6 +212,54 @@ namespace storm {
ExportJsonType opDecl ( f . isTrueFormula ( ) ? true : false ) ;
return opDecl ;
}
boost : : any FormulaToJaniJson : : visit ( storm : : logic : : BoundedGloballyFormula const & f , boost : : any const & data ) const {
STORM_LOG_THROW ( ! f . hasMultiDimensionalSubformulas ( ) , storm : : exceptions : : NotSupportedException , " Jani export of multi-dimensional bounded globally formulas is not supported. " ) ;
ExportJsonType opDecl ;
opDecl [ " op " ] = " G " ;
opDecl [ " exp " ] = anyToJson ( f . getSubformula ( ) . accept ( * this , data ) ) ;
bool hasStepBounds ( false ) , hasTimeBounds ( false ) ;
std : : vector < ExportJsonType > rewardBounds ;
for ( uint64_t i = 0 ; i < f . getDimension ( ) ; + + i ) {
boost : : optional < storm : : expressions : : Expression > lower , upper ;
boost : : optional < bool > lowerExclusive , upperExclusive ;
if ( f . hasLowerBound ( i ) ) {
lower = f . getLowerBound ( i ) ;
lowerExclusive = f . isLowerBoundStrict ( i ) ;
}
if ( f . hasUpperBound ( i ) ) {
upper = f . getUpperBound ( i ) ;
upperExclusive = f . isUpperBoundStrict ( i ) ;
}
ExportJsonType propertyInterval = constructPropertyInterval ( lower , lowerExclusive , upper , upperExclusive ) ;
auto tbr = f . getTimeBoundReference ( i ) ;
if ( tbr . isStepBound ( ) | | ( model . isDiscreteTimeModel ( ) & & tbr . isTimeBound ( ) ) ) {
STORM_LOG_THROW ( ! hasStepBounds , storm : : exceptions : : NotSupportedException , " Jani export of until formulas with multiple step bounds is not supported. " ) ;
hasStepBounds = true ;
opDecl [ " step-bounds " ] = propertyInterval ;
} else if ( tbr . isRewardBound ( ) ) {
ExportJsonType rewbound ;
rewbound [ " exp " ] = buildExpression ( model . getRewardModelExpression ( tbr . getRewardName ( ) ) , model . getConstants ( ) , model . getGlobalVariables ( ) ) ;
if ( tbr . hasRewardAccumulation ( ) ) {
rewbound [ " accumulate " ] = constructRewardAccumulation ( tbr . getRewardAccumulation ( ) , tbr . getRewardName ( ) ) ;
} else {
rewbound [ " accumulate " ] = constructStandardRewardAccumulation ( tbr . getRewardName ( ) ) ;
}
rewbound [ " bounds " ] = propertyInterval ;
rewardBounds . push_back ( std : : move ( rewbound ) ) ;
} else {
STORM_LOG_THROW ( ! hasTimeBounds , storm : : exceptions : : NotSupportedException , " Jani export of globally formulas with multiple time bounds is not supported. " ) ;
hasTimeBounds = true ;
opDecl [ " time-bounds " ] = propertyInterval ;
}
}
if ( ! rewardBounds . empty ( ) ) {
opDecl [ " reward-bounds " ] = ExportJsonType ( rewardBounds ) ;
}
return opDecl ;
}
boost : : any FormulaToJaniJson : : visit ( storm : : logic : : BoundedUntilFormula const & f , boost : : any const & data ) const {
STORM_LOG_THROW ( ! f . hasMultiDimensionalSubformulas ( ) , storm : : exceptions : : NotSupportedException , " Jani export of multi-dimensional bounded until formulas is not supported. " ) ;
ExportJsonType opDecl ;