@ -2,7 +2,7 @@
# include "src/utility/OsDetection.h"
# include "src/utility/constants.h"
// The action class header.
// The action class headers .
# include "src/formula/Actions/AbstractAction.h"
# include "src/formula/Actions/MinMaxAction.h"
# include "src/formula/Actions/RangeAction.h"
@ -70,24 +70,12 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl:
atomicProposition = ( freeIdentifierName ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : Ap < double > > ( qi : : _1 ) ] ;
atomicProposition . name ( " state formula " ) ;
probabilisticBoundOperator = (
( qi : : lit ( " P " ) > > qi : : lit ( " min " ) > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > pathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : ProbabilisticBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 , true ) ] |
( qi : : lit ( " P " ) > > qi : : lit ( " max " ) > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > pathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : ProbabilisticBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 , false ) ] |
( qi : : lit ( " P " ) > > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > pathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : ProbabilisticBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 ) ]
) ;
probabilisticBoundOperator = ( ( qi : : lit ( " P " ) > > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > pathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : ProbabilisticBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 ) ] ) ;
probabilisticBoundOperator . name ( " state formula " ) ;
rewardBoundOperator = (
( qi : : lit ( " R " ) > > qi : : lit ( " min " ) > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > rewardPathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : RewardBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 , true ) ] |
( qi : : lit ( " R " ) > > qi : : lit ( " max " ) > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > rewardPathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : RewardBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 , false ) ] |
( qi : : lit ( " R " ) > > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > rewardPathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : RewardBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 ) ]
) ;
rewardBoundOperator = ( ( qi : : lit ( " R " ) > > comparisonType > qi : : double_ > qi : : lit ( " [ " ) > rewardPathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : RewardBoundOperator < double > > ( qi : : _1 , qi : : _2 , qi : : _3 ) ] ) ;
rewardBoundOperator . name ( " state formula " ) ;
//This block defines rules for parsing probabilistic path formulas
@ -115,31 +103,66 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl:
//This block defines rules for parsing reward path formulas
rewardPathFormula = ( cumulativeReward | reachabilityReward | instantaneousReward | steadyStateReward ) ;
rewardPathFormula . name ( " path formula (for reward operator) " ) ;
cumulativeReward = ( qi : : lit ( " C " ) > qi : : lit ( " <= " ) > qi : : double_ )
[ qi : : _val = phoenix : : new_ < storm : : property : : prctl : : CumulativeReward < double > > ( qi : : _1 ) ] ;
cumulativeReward = ( qi : : lit ( " C " ) > qi : : lit ( " <= " ) > qi : : double_ ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : CumulativeReward < double > > ( qi : : _1 ) ] ;
cumulativeReward . name ( " path formula (for reward operator) " ) ;
reachabilityReward = ( qi : : lit ( " F " ) > stateFormula ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : ReachabilityReward < double > > ( qi : : _1 ) ] ;
reachabilityReward . name ( " path formula (for reward operator) " ) ;
instantaneousReward = ( qi : : lit ( " I " ) > qi : : lit ( " = " ) > qi : : double_ )
[ qi : : _val = phoenix : : new_ < storm : : property : : prctl : : InstantaneousReward < double > > ( qi : : _1 ) ] ;
instantaneousReward = ( qi : : lit ( " I " ) > qi : : lit ( " = " ) > qi : : double_ ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : InstantaneousReward < double > > ( qi : : _1 ) ] ;
instantaneousReward . name ( " path formula (for reward operator) " ) ;
steadyStateReward = ( qi : : lit ( " S " ) ) [ qi : : _val = phoenix : : new_ < storm : : property : : prctl : : SteadyStateReward < double > > ( ) ] ;
formula = ( pathFormula | stateFormula ) ;
formula . name ( " PRCTL formula " ) ;
minMaxAction = qi : : lit ( " minmax " ) > > qi : : lit ( " , " ) > > ( qi : : lit ( " min " ) [ qi : : _val = phoenix : : new_ < storm : : property : : action : : MinMaxAction < double > > ( true ) ] | qi : : lit ( " min " ) [ qi : : _val = storm : : property : : action : : MinMaxAction < double > ( false ) ] ) ;
//This block defines rules for parsing formulas with noBoundOperators
//Note that this is purely for legacy support.
//NoBoundOperators are no longer part of the formula tree and are therefore deprecated.
noBoundOperator = ( probabilisticNoBoundOperator | rewardNoBoundOperator ) ;
noBoundOperator . name ( " no bound operator " ) ;
probabilisticNoBoundOperator = (
( qi : : lit ( " P " ) > > qi : : lit ( " min " ) > > qi : : lit ( " = " ) > > qi : : lit ( " ? " ) > > qi : : lit ( " [ " ) > > pathFormula > > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _1 , true ) ] |
( qi : : lit ( " P " ) > > qi : : lit ( " max " ) > > qi : : lit ( " = " ) > > qi : : lit ( " ? " ) > > qi : : lit ( " [ " ) > > pathFormula > > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _1 , false ) ] |
( qi : : lit ( " P " ) > > qi : : lit ( " = " ) > > qi : : lit ( " ? " ) > qi : : lit ( " [ " ) > pathFormula > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _1 ) ]
) ;
probabilisticNoBoundOperator . name ( " no bound operator " ) ;
rewardNoBoundOperator = (
( qi : : lit ( " R " ) > > qi : : lit ( " min " ) > > qi : : lit ( " = " ) > > qi : : lit ( " ? " ) > > qi : : lit ( " [ " ) > > rewardPathFormula > > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _1 , true ) ] |
( qi : : lit ( " R " ) > > qi : : lit ( " max " ) > > qi : : lit ( " = " ) > > qi : : lit ( " ? " ) > > qi : : lit ( " [ " ) > > rewardPathFormula > > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _1 , false ) ] |
( qi : : lit ( " R " ) > > qi : : lit ( " = " ) > > qi : : lit ( " ? " ) > > qi : : lit ( " [ " ) > > rewardPathFormula > > qi : : lit ( " ] " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _1 ) ]
) ;
rewardNoBoundOperator . name ( " no bound operator " ) ;
minMaxAction = qi : : lit ( " minmax " ) > > qi : : lit ( " , " ) > > (
qi : : lit ( " min " ) [ qi : : _val =
phoenix : : new_ < storm : : property : : action : : MinMaxAction < double > > ( true ) ] |
qi : : lit ( " min " ) [ qi : : _val =
phoenix : : new_ < storm : : property : : action : : MinMaxAction < double > > ( false ) ] ) ;
minMaxAction . name ( " minmax action for the formula filter " ) ;
rangeAction = ( qi : : lit ( " range " ) > > qi : : lit ( " , " ) > > qi : : uint_ > > qi : : lit ( " , " ) > > qi : : uint_ ) [ qi : : _val = phoenix : : new_ < storm : : property : : action : : RangeAction < double > > ( qi : : _1 , qi : : _2 ) ] ;
rangeAction = ( qi : : lit ( " range " ) > > qi : : lit ( " , " ) > > qi : : uint_ > > qi : : lit ( " , " ) > > qi : : uint_ ) [ qi : : _val =
phoenix : : new_ < storm : : property : : action : : RangeAction < double > > ( qi : : _1 , qi : : _2 ) ] ;
rangeAction . name ( " range action for the formula filter " ) ;
abstractAction = ( rangeAction | minMaxAction ) > > ( qi : : eps | qi : : lit ( " , " ) ) ;
abstractAction . name ( " filter action " ) ;
filter = ( ( qi : : eps | qi : : lit ( " filter " ) > > qi : : lit ( " [ " ) > > + abstractAction > > qi : : lit ( " ] " ) ) > > ( formula | ( qi : : lit ( " ( " ) > > formula > > qi : : lit ( " ) " ) ) ) )
[ qi : : _val = phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _2 , qi : : _1 ) ] ;
filter = ( qi : : lit ( " filter " ) > > qi : : lit ( " [ " ) > > + abstractAction > > qi : : lit ( " ] " ) > > qi : : lit ( " ( " ) > > formula > > qi : : lit ( " ) " ) ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _2 , qi : : _1 ) ] |
( formula ) [ qi : : _val =
phoenix : : new_ < storm : : property : : prctl : : PrctlFilter < double > > ( qi : : _1 ) ] |
( noBoundOperator ) [ qi : : _val =
qi : : _1 ] ;
filter . name ( " PRCTL formula filter " ) ;
start = ( ( ( filter ) > ( comment | qi : : eps ) ) [ qi : : _val = qi : : _1 ] | comment ) > qi : : eoi ;
@ -149,6 +172,10 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl:
qi : : rule < Iterator , storm : : property : : prctl : : PrctlFilter < double > * ( ) , Skipper > start ;
qi : : rule < Iterator , storm : : property : : prctl : : PrctlFilter < double > * ( ) , Skipper > filter ;
qi : : rule < Iterator , storm : : property : : prctl : : PrctlFilter < double > * ( ) , Skipper > noBoundOperator ;
qi : : rule < Iterator , storm : : property : : prctl : : PrctlFilter < double > * ( ) , Skipper > probabilisticNoBoundOperator ;
qi : : rule < Iterator , storm : : property : : prctl : : PrctlFilter < double > * ( ) , Skipper > rewardNoBoundOperator ;
qi : : rule < Iterator , storm : : property : : action : : AbstractAction < double > * ( ) , Skipper > abstractAction ;
qi : : rule < Iterator , storm : : property : : action : : RangeAction < double > * ( ) , Skipper > rangeAction ;
qi : : rule < Iterator , storm : : property : : action : : MinMaxAction < double > * ( ) , Skipper > minMaxAction ;
@ -198,7 +225,7 @@ storm::parser::PrctlParser::PrctlParser(std::string formulaString) {
// Prepare resulting intermediate representation of input.
storm : : property : : prctl : : AbstractPrctlFormula < double > * result_pointer = nullptr ;
storm : : property : : prctl : : PrctlFilter < double > * result_pointer = nullptr ;
PrctlGrammar < PositionIteratorType , BOOST_TYPEOF ( boost : : spirit : : ascii : : space ) > grammar ;