@ -101,7 +101,7 @@ namespace storm {
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > probabilityOperator ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > probabilityOperator ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > rewardOperator ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > rewardOperator ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > expectedTimeOperator ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > expectedTimeOperator ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > steadyStat eOperator;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > longRunAverag eOperator;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > simpleFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > simpleFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > stateFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > stateFormula ;
@ -131,6 +131,7 @@ namespace storm {
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > cumulativeRewardFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > cumulativeRewardFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > reachabilityRewardFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > reachabilityRewardFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > instantaneousRewardFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > instantaneousRewardFormula ;
qi : : rule < Iterator , std : : shared_ptr < storm : : logic : : Formula > ( ) , Skipper > longRunAverageRewardFormula ;
// Parser that is used to recognize doubles only (as opposed to Spirit's double_ parser).
// Parser that is used to recognize doubles only (as opposed to Spirit's double_ parser).
boost : : spirit : : qi : : real_parser < double , boost : : spirit : : qi : : strict_real_policies < double > > strict_double ;
boost : : spirit : : qi : : real_parser < double , boost : : spirit : : qi : : strict_real_policies < double > > strict_double ;
@ -139,6 +140,7 @@ namespace storm {
std : : shared_ptr < storm : : logic : : Formula > createInstantaneousRewardFormula ( boost : : variant < unsigned , double > const & timeBound ) const ;
std : : shared_ptr < storm : : logic : : Formula > createInstantaneousRewardFormula ( boost : : variant < unsigned , double > const & timeBound ) const ;
std : : shared_ptr < storm : : logic : : Formula > createCumulativeRewardFormula ( boost : : variant < unsigned , double > const & timeBound ) const ;
std : : shared_ptr < storm : : logic : : Formula > createCumulativeRewardFormula ( boost : : variant < unsigned , double > const & timeBound ) const ;
std : : shared_ptr < storm : : logic : : Formula > createReachabilityRewardFormula ( std : : shared_ptr < storm : : logic : : Formula > const & stateFormula ) const ;
std : : shared_ptr < storm : : logic : : Formula > createReachabilityRewardFormula ( std : : shared_ptr < storm : : logic : : Formula > const & stateFormula ) const ;
std : : shared_ptr < storm : : logic : : Formula > createLongRunAverageRewardFormula ( ) const ;
std : : shared_ptr < storm : : logic : : Formula > createAtomicExpressionFormula ( storm : : expressions : : Expression const & expression ) const ;
std : : shared_ptr < storm : : logic : : Formula > createAtomicExpressionFormula ( storm : : expressions : : Expression const & expression ) const ;
std : : shared_ptr < storm : : logic : : Formula > createBooleanLiteralFormula ( bool literal ) const ;
std : : shared_ptr < storm : : logic : : Formula > createBooleanLiteralFormula ( bool literal ) const ;
std : : shared_ptr < storm : : logic : : Formula > createAtomicLabelFormula ( std : : string const & label ) const ;
std : : shared_ptr < storm : : logic : : Formula > createAtomicLabelFormula ( std : : string const & label ) const ;
@ -243,6 +245,9 @@ namespace storm {
// Set the identifier mapping to actually generate expressions.
// Set the identifier mapping to actually generate expressions.
expressionParser . setIdentifierMapping ( & identifiers_ ) ;
expressionParser . setIdentifierMapping ( & identifiers_ ) ;
longRunAverageRewardFormula = ( qi : : lit ( " LRA " ) | qi : : lit ( " S " ) ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createLongRunAverageRewardFormula , phoenix : : ref ( * this ) ) ] ;
longRunAverageRewardFormula . name ( " long run average reward formula " ) ;
instantaneousRewardFormula = ( qi : : lit ( " I= " ) > > strict_double ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createInstantaneousRewardFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] | ( qi : : lit ( " I= " ) > qi : : uint_ ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createInstantaneousRewardFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
instantaneousRewardFormula = ( qi : : lit ( " I= " ) > > strict_double ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createInstantaneousRewardFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] | ( qi : : lit ( " I= " ) > qi : : uint_ ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createInstantaneousRewardFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
instantaneousRewardFormula . name ( " instantaneous reward formula " ) ;
instantaneousRewardFormula . name ( " instantaneous reward formula " ) ;
@ -252,7 +257,7 @@ namespace storm {
reachabilityRewardFormula = ( qi : : lit ( " F " ) > stateFormula ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createReachabilityRewardFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
reachabilityRewardFormula = ( qi : : lit ( " F " ) > stateFormula ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createReachabilityRewardFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
reachabilityRewardFormula . name ( " reachability reward formula " ) ;
reachabilityRewardFormula . name ( " reachability reward formula " ) ;
rewardPathFormula = reachabilityRewardFormula | cumulativeRewardFormula | instantaneousRewardFormula ;
rewardPathFormula = reachabilityRewardFormula | cumulativeRewardFormula | instantaneousRewardFormula | longRunAverageRewardFormula ;
rewardPathFormula . name ( " reward path formula " ) ;
rewardPathFormula . name ( " reward path formula " ) ;
expressionFormula = expressionParser [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createAtomicExpressionFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
expressionFormula = expressionParser [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createAtomicExpressionFormula , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
@ -267,7 +272,7 @@ namespace storm {
booleanLiteralFormula = ( qi : : lit ( " true " ) [ qi : : _a = true ] | qi : : lit ( " false " ) [ qi : : _a = false ] ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createBooleanLiteralFormula , phoenix : : ref ( * this ) , qi : : _a ) ] ;
booleanLiteralFormula = ( qi : : lit ( " true " ) [ qi : : _a = true ] | qi : : lit ( " false " ) [ qi : : _a = false ] ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createBooleanLiteralFormula , phoenix : : ref ( * this ) , qi : : _a ) ] ;
booleanLiteralFormula . name ( " boolean literal formula " ) ;
booleanLiteralFormula . name ( " boolean literal formula " ) ;
operatorFormula = probabilityOperator | rewardOperator | steadyStat eOperator;
operatorFormula = probabilityOperator | rewardOperator | longRunAverag eOperator;
operatorFormula . name ( " operator formulas " ) ;
operatorFormula . name ( " operator formulas " ) ;
atomicStateFormula = booleanLiteralFormula | labelFormula | expressionFormula | ( qi : : lit ( " ( " ) > stateFormula > qi : : lit ( " ) " ) ) | operatorFormula ;
atomicStateFormula = booleanLiteralFormula | labelFormula | expressionFormula | ( qi : : lit ( " ( " ) > stateFormula > qi : : lit ( " ) " ) ) | operatorFormula ;
@ -303,8 +308,8 @@ namespace storm {
operatorInformation = ( - optimalityOperator_ [ qi : : _a = qi : : _1 ] > > ( ( relationalOperator_ [ qi : : _b = qi : : _1 ] > qi : : double_ [ qi : : _c = qi : : _1 ] ) | ( qi : : lit ( " = " ) > qi : : lit ( " ? " ) ) ) ) [ qi : : _val = phoenix : : construct < std : : tuple < boost : : optional < storm : : OptimizationDirection > , boost : : optional < storm : : logic : : ComparisonType > , boost : : optional < double > > > ( qi : : _a , qi : : _b , qi : : _c ) ] ;
operatorInformation = ( - optimalityOperator_ [ qi : : _a = qi : : _1 ] > > ( ( relationalOperator_ [ qi : : _b = qi : : _1 ] > qi : : double_ [ qi : : _c = qi : : _1 ] ) | ( qi : : lit ( " = " ) > qi : : lit ( " ? " ) ) ) ) [ qi : : _val = phoenix : : construct < std : : tuple < boost : : optional < storm : : OptimizationDirection > , boost : : optional < storm : : logic : : ComparisonType > , boost : : optional < double > > > ( qi : : _a , qi : : _b , qi : : _c ) ] ;
operatorInformation . name ( " operator information " ) ;
operatorInformation . name ( " operator information " ) ;
steadyStateOperator = ( qi : : lit ( " LRA " ) > operatorInformation > qi : : lit ( " [ " ) > stateFormula > qi : : lit ( " ] " ) ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createLongRunAverageOperatorFormula , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
longRunAverageOperator = ( ( qi : : lit ( " LRA " ) | qi : : lit ( " S " ) ) > operatorInformation > qi : : lit ( " [ " ) > stateFormula > qi : : lit ( " ] " ) ) [ qi : : _val = phoenix : : bind ( & FormulaParserGrammar : : createLongRunAverageOperatorFormula , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
steadyStat eOperator. name ( " long-run average operator " ) ;
longRunAverag eOperator. name ( " long-run average operator " ) ;
rewardModelName = qi : : lit ( " { \" " ) > label > qi : : lit ( " \" } " ) ;
rewardModelName = qi : : lit ( " { \" " ) > label > qi : : lit ( " \" } " ) ;
rewardModelName . name ( " reward model name " ) ;
rewardModelName . name ( " reward model name " ) ;
@ -338,7 +343,7 @@ namespace storm {
debug ( andStateFormula ) ;
debug ( andStateFormula ) ;
debug ( probabilityOperator ) ;
debug ( probabilityOperator ) ;
debug ( rewardOperator ) ;
debug ( rewardOperator ) ;
debug ( steadyStat eOperator) ;
debug ( longRunAverag eOperator) ;
debug ( pathFormulaWithoutUntil ) ;
debug ( pathFormulaWithoutUntil ) ;
debug ( pathFormula ) ;
debug ( pathFormula ) ;
debug ( conditionalFormula ) ;
debug ( conditionalFormula ) ;
@ -362,7 +367,7 @@ namespace storm {
qi : : on_error < qi : : fail > ( andStateFormula , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( andStateFormula , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( probabilityOperator , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( probabilityOperator , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( rewardOperator , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( rewardOperator , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( steadyStat eOperator, handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( longRunAverag eOperator, handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( operatorInformation , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( operatorInformation , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( pathFormulaWithoutUntil , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( pathFormulaWithoutUntil , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( pathFormula , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
qi : : on_error < qi : : fail > ( pathFormula , handler ( qi : : _1 , qi : : _2 , qi : : _3 , qi : : _4 ) ) ;
@ -409,6 +414,10 @@ namespace storm {
return std : : shared_ptr < storm : : logic : : Formula > ( new storm : : logic : : ReachabilityRewardFormula ( stateFormula ) ) ;
return std : : shared_ptr < storm : : logic : : Formula > ( new storm : : logic : : ReachabilityRewardFormula ( stateFormula ) ) ;
}
}
std : : shared_ptr < storm : : logic : : Formula > FormulaParserGrammar : : createLongRunAverageRewardFormula ( ) const {
return std : : shared_ptr < storm : : logic : : Formula > ( new storm : : logic : : LongRunAverageRewardFormula ( ) ) ;
}
std : : shared_ptr < storm : : logic : : Formula > FormulaParserGrammar : : createAtomicExpressionFormula ( storm : : expressions : : Expression const & expression ) const {
std : : shared_ptr < storm : : logic : : Formula > FormulaParserGrammar : : createAtomicExpressionFormula ( storm : : expressions : : Expression const & expression ) const {
STORM_LOG_THROW ( expression . hasBooleanType ( ) , storm : : exceptions : : WrongFormatException , " Expected expression of boolean type. " ) ;
STORM_LOG_THROW ( expression . hasBooleanType ( ) , storm : : exceptions : : WrongFormatException , " Expected expression of boolean type. " ) ;
return std : : shared_ptr < storm : : logic : : Formula > ( new storm : : logic : : AtomicExpressionFormula ( expression ) ) ;
return std : : shared_ptr < storm : : logic : : Formula > ( new storm : : logic : : AtomicExpressionFormula ( expression ) ) ;
xxxxxxxxxx