@ -149,11 +149,11 @@ namespace storm {
qi : : lit ( " Optimal " ) [ qi : : _val = storm : : logic : : ShieldingType : : Optimal ] ) > - qi : : lit ( " Shield " ) ;
qi : : lit ( " Optimal " ) [ qi : : _val = storm : : logic : : ShieldingType : : Optimal ] ) > - qi : : lit ( " Shield " ) ;
shieldingType . name ( " shielding type " ) ;
shieldingType . name ( " shielding type " ) ;
multiplicativeFactor = qi : : double_ [ qi : : _pass = ( qi : : _1 > = 0 ) & ( qi : : _1 < = 1.0 ) , qi : : _val = qi : : _1 ] ;
multiplicativeFactor . name ( " multiplicative factor between 0 and 1" ) ;
probability = qi : : double_ [ qi : : _pass = ( qi : : _1 > = 0 ) & ( qi : : _1 < = 1.0 ) , qi : : _val = qi : : _1 ] ;
probability . name ( " double between 0 and 1" ) ;
shieldComparison = ( ( qi : : lit ( " lambda " ) [ qi : : _a = storm : : logic : : ShieldComparison : : Relative ] |
shieldComparison = ( ( qi : : lit ( " lambda " ) [ qi : : _a = storm : : logic : : ShieldComparison : : Relative ] |
qi : : lit ( " gamma " ) [ qi : : _a = storm : : logic : : ShieldComparison : : Absolute ] ) > qi : : lit ( " = " ) > multiplicativeFactor ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createShieldComparisonStruct , phoenix : : ref ( * this ) , qi : : _a , qi : : _1 ) ] ;
qi : : lit ( " gamma " ) [ qi : : _a = storm : : logic : : ShieldComparison : : Absolute ] ) > qi : : lit ( " = " ) > probability ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createShieldComparisonStruct , phoenix : : ref ( * this ) , qi : : _a , qi : : _1 ) ] ;
shieldComparison . name ( " shield comparison type " ) ;
shieldComparison . name ( " shield comparison type " ) ;
stateFormula = ( orStateFormula | multiFormula | quantileFormula | gameFormula ) ;
stateFormula = ( orStateFormula | multiFormula | quantileFormula | gameFormula ) ;
@ -514,8 +514,10 @@ namespace storm {
std : : shared_ptr < storm : : logic : : ShieldExpression const > FormulaParserGrammar : : createShieldExpression ( storm : : logic : : ShieldingType type , std : : string name , boost : : optional < std : : pair < storm : : logic : : ShieldComparison , double > > comparisonStruct ) {
std : : shared_ptr < storm : : logic : : ShieldExpression const > FormulaParserGrammar : : createShieldExpression ( storm : : logic : : ShieldingType type , std : : string name , boost : : optional < std : : pair < storm : : logic : : ShieldComparison , double > > comparisonStruct ) {
if ( comparisonStruct . is_initialized ( ) ) {
if ( comparisonStruct . is_initialized ( ) ) {
STORM_LOG_WARN_COND ( type ! = storm : : logic : : ShieldingType : : Optimal , " Comparison for optimal shield will be ignored. " ) ;
return std : : shared_ptr < storm : : logic : : ShieldExpression > ( new storm : : logic : : ShieldExpression ( type , name , comparisonStruct . get ( ) . first , comparisonStruct . get ( ) . second ) ) ;
return std : : shared_ptr < storm : : logic : : ShieldExpression > ( new storm : : logic : : ShieldExpression ( type , name , comparisonStruct . get ( ) . first , comparisonStruct . get ( ) . second ) ) ;
} else {
} else {
STORM_LOG_THROW ( type = = storm : : logic : : ShieldingType : : Optimal , storm : : exceptions : : WrongFormatException , " Construction of safety shield needs a comparison parameter (lambda or gamma) " ) ;
return std : : shared_ptr < storm : : logic : : ShieldExpression > ( new storm : : logic : : ShieldExpression ( type , name ) ) ;
return std : : shared_ptr < storm : : logic : : ShieldExpression > ( new storm : : logic : : ShieldExpression ( type , name ) ) ;
}
}
}
}