| 
					
					
						
							
						
					
					
				 | 
				@ -35,7 +35,15 @@ namespace parser { | 
			
		
		
	
		
			
				 | 
				 | 
				template<typename Iterator, typename Skipper> | 
				 | 
				 | 
				template<typename Iterator, typename Skipper> | 
			
		
		
	
		
			
				 | 
				 | 
				struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl::AbstractPrctlFormula<double>*(), Skipper > { | 
				 | 
				 | 
				struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl::AbstractPrctlFormula<double>*(), Skipper > { | 
			
		
		
	
		
			
				 | 
				 | 
					PrctlGrammar() : PrctlGrammar::base_type(start) { | 
				 | 
				 | 
					PrctlGrammar() : PrctlGrammar::base_type(start) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						//This block contains helper rules that may be used several times
 | 
			
		
		
	
		
			
				 | 
				 | 
						freeIdentifierName = qi::lexeme[+(qi::alpha | qi::char_('_'))]; | 
				 | 
				 | 
						freeIdentifierName = qi::lexeme[+(qi::alpha | qi::char_('_'))]; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						comparisonType = ( | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit(">="))[qi::_val = storm::property::GREATER_EQUAL] | | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit(">"))[qi::_val = storm::property::GREATER] | | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit("<="))[qi::_val = storm::property::LESS_EQUAL] | | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit("<"))[qi::_val = storm::property::LESS]); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						comment = qi::lit("//") | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
						//This block defines rules for parsing state formulas
 | 
				 | 
				 | 
						//This block defines rules for parsing state formulas
 | 
			
		
		
	
		
			
				 | 
				 | 
						stateFormula %= orFormula; | 
				 | 
				 | 
						stateFormula %= orFormula; | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -58,44 +66,47 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl: | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Ap<double>>(qi::_1)]; | 
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Ap<double>>(qi::_1)]; | 
			
		
		
	
		
			
				 | 
				 | 
						atomicProposition.name("state formula"); | 
				 | 
				 | 
						atomicProposition.name("state formula"); | 
			
		
		
	
		
			
				 | 
				 | 
						probabilisticBoundOperator = ( | 
				 | 
				 | 
						probabilisticBoundOperator = ( | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("P") >> qi::lit(">") >> qi::double_ > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
										phoenix::new_<storm::property::prctl::ProbabilisticBoundOperator<double> >(storm::property::GREATER, qi::_1, qi::_2)] | | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("P") >> qi::lit(">=") > qi::double_ > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
										phoenix::new_<storm::property::prctl::ProbabilisticBoundOperator<double> >(storm::property::GREATER_EQUAL, qi::_1, qi::_2)] | | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("P") >> qi::lit("<") >> qi::double_ > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
												phoenix::new_<storm::property::prctl::ProbabilisticBoundOperator<double> >(storm::property::LESS, qi::_1, qi::_2)] | | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("P") >> qi::lit("<=") > qi::double_ > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
										phoenix::new_<storm::property::prctl::ProbabilisticBoundOperator<double> >(storm::property::LESS_EQUAL, qi::_1, qi::_2)] | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(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.name("state formula"); | 
				 | 
				 | 
						probabilisticBoundOperator.name("state formula"); | 
			
		
		
	
		
			
				 | 
				 | 
						rewardBoundOperator = ( | 
				 | 
				 | 
						rewardBoundOperator = ( | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("R") >> qi::lit(">") >> qi::double_ >> qi::lit("[") >> rewardPathFormula >> qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
										phoenix::new_<storm::property::prctl::RewardBoundOperator<double> >(storm::property::GREATER, qi::_1, qi::_2)] | | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("R") >> qi::lit(">=") >> qi::double_ >> qi::lit("[") >> rewardPathFormula >> qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
												phoenix::new_<storm::property::prctl::RewardBoundOperator<double> >(storm::property::GREATER_EQUAL, qi::_1, qi::_2)] | | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("R") >> qi::lit("<") >> qi::double_ >> qi::lit("[") >> rewardPathFormula >> qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
														phoenix::new_<storm::property::prctl::RewardBoundOperator<double> >(storm::property::LESS, qi::_1, qi::_2)] | | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								(qi::lit("R") >> qi::lit("<=")>> qi::double_ >> qi::lit("[") >> rewardPathFormula >> qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
										phoenix::new_<storm::property::prctl::RewardBoundOperator<double> >(storm::property::LESS_EQUAL, qi::_1, qi::_2)] | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(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.name("state formula"); | 
				 | 
				 | 
						rewardBoundOperator.name("state formula"); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
						//This block defines rules for parsing formulas with noBoundOperators
 | 
				 | 
				 | 
						//This block defines rules for parsing formulas with noBoundOperators
 | 
			
		
		
	
		
			
				 | 
				 | 
						noBoundOperator = (probabilisticNoBoundOperator | rewardNoBoundOperator); | 
				 | 
				 | 
						noBoundOperator = (probabilisticNoBoundOperator | rewardNoBoundOperator); | 
			
		
		
	
		
			
				 | 
				 | 
						noBoundOperator.name("no bound operator"); | 
				 | 
				 | 
						noBoundOperator.name("no bound operator"); | 
			
		
		
	
		
			
				 | 
				 | 
						probabilisticNoBoundOperator = (probabilisticMinimumNoBoundOperator | probabilisticMaximumNoBoundOperator | probabilisticDeterministicNoBoundOperator); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
						probabilisticMinimumNoBoundOperator = (qi::lit("P") >> qi::lit("min") >> qi::lit("=") >> qi::lit("?") > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
										phoenix::new_<storm::property::prctl::ProbabilisticNoBoundOperator<double> >(qi::_1, true)]; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						probabilisticNoBoundOperator = ( | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit("P") >> qi::lit("min") >> qi::lit("=") >> qi::lit("?") >> qi::lit("[") >> pathFormula >> qi::lit("]"))[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
														phoenix::new_<storm::property::prctl::ProbabilisticNoBoundOperator<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::ProbabilisticNoBoundOperator<double> >(qi::_1, false)] | | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit("P") >> qi::lit("=") >> qi::lit("?") > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
														phoenix::new_<storm::property::prctl::ProbabilisticNoBoundOperator<double> >(qi::_1)] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						probabilisticNoBoundOperator.name("no bound operator"); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
						probabilisticMaximumNoBoundOperator = (qi::lit("P") >> qi::lit("max") >> qi::lit("=") >> qi::lit("?") > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::ProbabilisticNoBoundOperator<double> >(qi::_1, false)]; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						rewardNoBoundOperator = ( | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit("R") >> qi::lit("min") >> qi::lit("=") >> qi::lit("?") >> qi::lit("[") >> rewardPathFormula >> qi::lit("]"))[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
												phoenix::new_<storm::property::prctl::RewardNoBoundOperator<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::RewardNoBoundOperator<double> >(qi::_1, false)] | | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								(qi::lit("R") >> qi::lit("=") >> qi::lit("?") >> qi::lit("[") >> rewardPathFormula >> qi::lit("]"))[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
												phoenix::new_<storm::property::prctl::RewardNoBoundOperator<double> >(qi::_1)] | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
						probabilisticDeterministicNoBoundOperator = (qi::lit("P") >> qi::lit("=") >> qi::lit("?") > qi::lit("[") > pathFormula > qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::ProbabilisticNoBoundOperator<double> >(qi::_1)]; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
						probabilisticNoBoundOperator.name("no bound operator"); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
						rewardNoBoundOperator = (qi::lit("R") >> qi::lit("=") >> qi::lit("?") >> qi::lit("[") >> rewardPathFormula >> qi::lit("]"))[qi::_val = | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::RewardNoBoundOperator<double> >(qi::_1)]; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
								); | 
			
		
		
	
		
			
				 | 
				 | 
						rewardNoBoundOperator.name("no bound operator"); | 
				 | 
				 | 
						rewardNoBoundOperator.name("no bound operator"); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
						//This block defines rules for parsing probabilistic path formulas
 | 
				 | 
				 | 
						//This block defines rules for parsing probabilistic path formulas
 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -103,19 +114,19 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl: | 
			
		
		
	
		
			
				 | 
				 | 
						pathFormula.name("path formula"); | 
				 | 
				 | 
						pathFormula.name("path formula"); | 
			
		
		
	
		
			
				 | 
				 | 
						boundedEventually = (qi::lit("F") >> qi::lit("<=") > qi::int_ > stateFormula)[qi::_val = | 
				 | 
				 | 
						boundedEventually = (qi::lit("F") >> qi::lit("<=") > qi::int_ > stateFormula)[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::BoundedEventually<double>>(qi::_2, qi::_1)]; | 
				 | 
				 | 
								phoenix::new_<storm::property::prctl::BoundedEventually<double>>(qi::_2, qi::_1)]; | 
			
		
		
	
		
			
				 | 
				 | 
						boundedEventually.name("path formula (for probablistic operator)"); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						boundedEventually.name("path formula (for probabilistic operator)"); | 
			
		
		
	
		
			
				 | 
				 | 
						eventually = (qi::lit("F") > stateFormula)[qi::_val = | 
				 | 
				 | 
						eventually = (qi::lit("F") > stateFormula)[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Eventually<double> >(qi::_1)]; | 
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Eventually<double> >(qi::_1)]; | 
			
		
		
	
		
			
				 | 
				 | 
						eventually.name("path formula (for probablistic operator)"); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						eventually.name("path formula (for probabilistic operator)"); | 
			
		
		
	
		
			
				 | 
				 | 
						globally = (qi::lit("G") > stateFormula)[qi::_val = | 
				 | 
				 | 
						globally = (qi::lit("G") > stateFormula)[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Globally<double> >(qi::_1)]; | 
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Globally<double> >(qi::_1)]; | 
			
		
		
	
		
			
				 | 
				 | 
						globally.name("path formula (for probablistic operator)"); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						globally.name("path formula (for probabilistic operator)"); | 
			
		
		
	
		
			
				 | 
				 | 
						boundedUntil = (stateFormula[qi::_a = phoenix::construct<std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>>(qi::_1)] >> qi::lit("U") >> qi::lit("<=") > qi::int_ > stateFormula) | 
				 | 
				 | 
						boundedUntil = (stateFormula[qi::_a = phoenix::construct<std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>>(qi::_1)] >> qi::lit("U") >> qi::lit("<=") > qi::int_ > stateFormula) | 
			
		
		
	
		
			
				 | 
				 | 
								[qi::_val = phoenix::new_<storm::property::prctl::BoundedUntil<double>>(phoenix::bind(&storm::property::prctl::AbstractStateFormula<double>::clone, phoenix::bind(&std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>::get, qi::_a)), qi::_3, qi::_2)]; | 
				 | 
				 | 
								[qi::_val = phoenix::new_<storm::property::prctl::BoundedUntil<double>>(phoenix::bind(&storm::property::prctl::AbstractStateFormula<double>::clone, phoenix::bind(&std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>::get, qi::_a)), qi::_3, qi::_2)]; | 
			
		
		
	
		
			
				 | 
				 | 
						boundedUntil.name("path formula (for probablistic operator)"); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						boundedUntil.name("path formula (for probabilistic operator)"); | 
			
		
		
	
		
			
				 | 
				 | 
						until = (stateFormula[qi::_a = phoenix::construct<std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>>(qi::_1)] >> qi::lit("U") > stateFormula)[qi::_val = | 
				 | 
				 | 
						until = (stateFormula[qi::_a = phoenix::construct<std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>>(qi::_1)] >> qi::lit("U") > stateFormula)[qi::_val = | 
			
		
		
	
		
			
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Until<double>>(phoenix::bind(&storm::property::prctl::AbstractStateFormula<double>::clone, phoenix::bind(&std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>::get, qi::_a)), qi::_2)]; | 
				 | 
				 | 
								phoenix::new_<storm::property::prctl::Until<double>>(phoenix::bind(&storm::property::prctl::AbstractStateFormula<double>::clone, phoenix::bind(&std::shared_ptr<storm::property::prctl::AbstractStateFormula<double>>::get, qi::_a)), qi::_2)]; | 
			
		
		
	
		
			
				 | 
				 | 
						until.name("path formula (for probablistic operator)"); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						until.name("path formula (for probabilistic operator)"); | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
						//This block defines rules for parsing reward path formulas
 | 
				 | 
				 | 
						//This block defines rules for parsing reward path formulas
 | 
			
		
		
	
		
			
				 | 
				 | 
						rewardPathFormula = (cumulativeReward | reachabilityReward | instantaneousReward | steadyStateReward); | 
				 | 
				 | 
						rewardPathFormula = (cumulativeReward | reachabilityReward | instantaneousReward | steadyStateReward); | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -131,11 +142,12 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl: | 
			
		
		
	
		
			
				 | 
				 | 
						instantaneousReward.name("path formula (for reward operator)"); | 
				 | 
				 | 
						instantaneousReward.name("path formula (for reward operator)"); | 
			
		
		
	
		
			
				 | 
				 | 
						steadyStateReward = (qi::lit("S"))[qi::_val = phoenix::new_<storm::property::prctl::SteadyStateReward<double>>()]; | 
				 | 
				 | 
						steadyStateReward = (qi::lit("S"))[qi::_val = phoenix::new_<storm::property::prctl::SteadyStateReward<double>>()]; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
						start = (noBoundOperator | stateFormula); | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
						start = (comment | noBoundOperator | stateFormula | qi::eps[qi::error()]); | 
			
		
		
	
		
			
				 | 
				 | 
						start.name("PRCTL formula"); | 
				 | 
				 | 
						start.name("PRCTL formula"); | 
			
		
		
	
		
			
				 | 
				 | 
					} | 
				 | 
				 | 
					} | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractPrctlFormula<double>*(), Skipper> start; | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractPrctlFormula<double>*(), Skipper> start; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractPrctlFormula<double>*(), Skipper> comment; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractStateFormula<double>*(), Skipper> stateFormula; | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractStateFormula<double>*(), Skipper> stateFormula; | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractStateFormula<double>*(), Skipper> atomicStateFormula; | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractStateFormula<double>*(), Skipper> atomicStateFormula; | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -149,9 +161,6 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl: | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> noBoundOperator; | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> noBoundOperator; | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> probabilisticNoBoundOperator; | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> probabilisticNoBoundOperator; | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> probabilisticMinimumNoBoundOperator; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> probabilisticMaximumNoBoundOperator; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> probabilisticDeterministicNoBoundOperator; | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> rewardNoBoundOperator; | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractNoBoundOperator<double>*(), Skipper> rewardNoBoundOperator; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractPathFormula<double>*(), Skipper> pathFormula; | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::prctl::AbstractPathFormula<double>*(), Skipper> pathFormula; | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -169,6 +178,7 @@ struct PrctlParser::PrctlGrammar : qi::grammar<Iterator, storm::property::prctl: | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
					qi::rule<Iterator, std::string(), Skipper> freeIdentifierName; | 
				 | 
				 | 
					qi::rule<Iterator, std::string(), Skipper> freeIdentifierName; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
					qi::rule<Iterator, storm::property::ComparisonType(), Skipper> comparisonType; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				}; | 
				 | 
				 | 
				}; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -221,7 +231,7 @@ storm::parser::PrctlParser::PrctlParser(std::string formulaString) { | 
			
		
		
	
		
			
				 | 
				 | 
					// The syntax can be so wrong that no rule can be matched at all
 | 
				 | 
				 | 
					// The syntax can be so wrong that no rule can be matched at all
 | 
			
		
		
	
		
			
				 | 
				 | 
					// In that case, no expectation failure is thrown, but the parser just returns nullptr
 | 
				 | 
				 | 
					// In that case, no expectation failure is thrown, but the parser just returns nullptr
 | 
			
		
		
	
		
			
				 | 
				 | 
					// Then, of course the result is not usable, hence we throw a WrongFormatException, too.
 | 
				 | 
				 | 
					// Then, of course the result is not usable, hence we throw a WrongFormatException, too.
 | 
			
		
		
	
		
			
				 | 
				 | 
					if (result_pointer == nullptr) { | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
					if (positionIteratorBegin != formulaString.end()) { | 
			
		
		
	
		
			
				 | 
				 | 
						throw storm::exceptions::WrongFormatException() << "Syntax error in formula"; | 
				 | 
				 | 
						throw storm::exceptions::WrongFormatException() << "Syntax error in formula"; | 
			
		
		
	
		
			
				 | 
				 | 
					} | 
				 | 
				 | 
					} | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |