@ -82,6 +82,15 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				        PrismParser : : PrismParser ( std : : string  const &  filename ,  Iterator  first ,  bool  prismCompatibility )  :  PrismParser : : base_type ( start ) ,  secondRun ( false ) ,  prismCompatibility ( prismCompatibility ) ,  filename ( filename ) ,  annotate ( first ) ,  manager ( new  storm : : expressions : : ExpressionManager ( ) ) ,  expressionParser ( new  ExpressionParser ( * manager ,  keywords_ ,  false ,  false ) )  {  
				 
				 
				        PrismParser : : PrismParser ( std : : string  const &  filename ,  Iterator  first ,  bool  prismCompatibility )  :  PrismParser : : base_type ( start ) ,  secondRun ( false ) ,  prismCompatibility ( prismCompatibility ) ,  filename ( filename ) ,  annotate ( first ) ,  manager ( new  storm : : expressions : : ExpressionManager ( ) ) ,  expressionParser ( new  ExpressionParser ( * manager ,  keywords_ ,  false ,  false ) )  {  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            ExpressionParser &  expression_  =  * expressionParser ;  
				 
				 
				            ExpressionParser &  expression_  =  * expressionParser ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            boolExpression  =  ( expression_ [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isOfBoolType ,  phoenix : : ref ( * this ) ,  qi : : _val ) ] ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            boolExpression . name ( " boolean expression " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            intExpression  =  ( expression_ [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isOfIntType ,  phoenix : : ref ( * this ) ,  qi : : _val ) ] ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            intExpression . name ( " integer expression " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            numericalExpression  =  ( expression_ [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isOfNumericalType ,  phoenix : : ref ( * this ) ,  qi : : _val ) ] ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            numericalExpression . name ( " numerical expression " ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            // Parse simple identifier.
  
				 
				 
				            // Parse simple identifier.
  
			
		 
		
	
		
			
				 
				 
				            identifier  % =  qi : : as_string [ qi : : raw [ qi : : lexeme [ ( ( qi : : alpha  |  qi : : char_ ( ' _ ' ) )  > >  * ( qi : : alnum  |  qi : : char_ ( ' _ ' ) ) ) ] ] ] [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isValidIdentifier ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				 
				 
				            identifier  % =  qi : : as_string [ qi : : raw [ qi : : lexeme [ ( ( qi : : alpha  |  qi : : char_ ( ' _ ' ) )  > >  * ( qi : : alnum  |  qi : : char_ ( ' _ ' ) ) ) ] ] ] [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isValidIdentifier ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            identifier . name ( " identifier " ) ;  
				 
				 
				            identifier . name ( " identifier " ) ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -95,13 +104,19 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            // Defined constants. Will be checked before undefined constants.
  
				 
				 
				            // Defined constants. Will be checked before undefined constants.
  
			
		 
		
	
		
			
				 
				 
				            // ">>" before literal '=' because we can still parse an undefined constant afterwards.
  
				 
				 
				            // ">>" before literal '=' because we can still parse an undefined constant afterwards.
  
			
		 
		
	
		
			
				 
				 
				            definedBooleanConstantDefinition  =  ( ( ( qi : : lit ( " const " )  > >  qi : : lit ( " bool " ) )  >  freshIdentifier )  > >  ( qi : : lit ( " = " )  >  expression_ [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isOfBoolType ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ]  >  qi : : lit ( " ; " ) ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDefinedBooleanConstant ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            definedBooleanConstantDefinition  =  ( ( ( qi : : lit ( " const " )  > >  qi : : lit ( " bool " ) )  >  freshIdentifier )  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    > >  ( qi : : lit ( " = " )  >  boolExpression  >  qi : : lit ( " ; " ) )  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDefinedBooleanConstant ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            definedBooleanConstantDefinition . name ( " defined boolean constant declaration " ) ;  
				 
				 
				            definedBooleanConstantDefinition . name ( " defined boolean constant declaration " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            definedIntegerConstantDefinition  =  ( ( ( qi : : lit ( " const " )  > >  - qi : : lit ( " int " ) )  > >  freshIdentifier )  > >  ( qi : : lit ( " = " )  >  expression_  >  qi : : lit ( " ; " ) ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDefinedIntegerConstant ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  // '>>' before freshIdentifier because of the optional 'int'.  Otherwise, undefined constant 'const bool b;' would not parse.
  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            definedIntegerConstantDefinition  =  ( ( ( qi : : lit ( " const " )  > >  - qi : : lit ( " int " ) )  > >  freshIdentifier )  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    > >  ( qi : : lit ( " = " )  >  intExpression  >  qi : : lit ( " ; " ) )  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDefinedIntegerConstant ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  // '>>' before freshIdentifier because of the optional 'int'.  Otherwise, undefined constant 'const bool b;' would not parse.
  
			
		 
		
	
		
			
				 
				 
				            definedIntegerConstantDefinition . name ( " defined integer constant declaration " ) ;  
				 
				 
				            definedIntegerConstantDefinition . name ( " defined integer constant declaration " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            definedDoubleConstantDefinition  =  ( ( ( qi : : lit ( " const " )  > >  qi : : lit ( " double " ) )  >  freshIdentifier )  > >  ( qi : : lit ( " = " )  >  expression_  >  qi : : lit ( " ; " ) ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDefinedDoubleConstant ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            definedDoubleConstantDefinition  =  ( ( ( qi : : lit ( " const " )  > >  qi : : lit ( " double " ) )  >  freshIdentifier )  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    > >  ( qi : : lit ( " = " )  >  numericalExpression  >  qi : : lit ( " ; " ) )  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDefinedDoubleConstant ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            definedDoubleConstantDefinition . name ( " defined double constant declaration " ) ;  
				 
				 
				            definedDoubleConstantDefinition . name ( " defined double constant declaration " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            definedConstantDefinition  % =  ( definedBooleanConstantDefinition  |  definedDoubleConstantDefinition  |  definedIntegerConstantDefinition ) ;  
				 
				 
				            definedConstantDefinition  % =  ( definedBooleanConstantDefinition  |  definedDoubleConstantDefinition  |  definedIntegerConstantDefinition ) ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -122,19 +137,19 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				            undefinedConstantDefinition . name ( " undefined constant definition " ) ;  
				 
				 
				            undefinedConstantDefinition . name ( " undefined constant definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            // formula definitions. This will be changed for the second run.
  
				 
				 
				            // formula definitions. This will be changed for the second run.
  
			
		 
		
	
		
			
				 
				 
				            formulaDefinitionRhs  =  ( qi : : lit ( " = " )  >  qi : : as_string [ ( + ( qi : : char_  -  qi : : lit ( " ; " ) ) ) ] [ qi : : _val  =  qi : : _1 ]  >  qi : : lit ( " ; " ) ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            formulaDefinitionRhs  =  ( qi : : lit ( " = " )  >  qi : : as_string [ ( + ( qi : : char_  -  ( qi : : lit ( " ; " )  |  qi : : lit ( " endmodule " ) ) ) ) ] [ qi : : _val  =  qi : : _1 ]  >  qi : : lit ( " ; " ) ) ;  
			
		 
		
	
		
			
				 
				 
				            formulaDefinitionRhs . name ( " formula defining expression " ) ;  
				 
				 
				            formulaDefinitionRhs . name ( " formula defining expression " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            formulaDefinition  =  ( qi : : lit ( " formula " )  >  freshIdentifier  >  formulaDefinitionRhs  ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createFormulaFirstRun ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				 
				 
				            formulaDefinition  =  ( qi : : lit ( " formula " )  >  freshIdentifier  >  formulaDefinitionRhs  ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createFormulaFirstRun ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            formulaDefinition . name ( " formula definition " ) ;  
				 
				 
				            formulaDefinition . name ( " formula definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            booleanVariableDefinition  =  ( ( freshIdentifier  > >  qi : : lit ( " : " )  > >  qi : : lit ( " bool " ) )  >  - ( ( qi : : lit ( " init " )  >  expression_ [ qi : : _a  =  qi : : _1 ] )  |  qi : : attr ( manager - > boolean ( false ) ) )  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createBooleanVariable ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _a ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            booleanVariableDefinition  =  ( ( ( freshIdentifier  >  qi : : lit ( " : " ) )  > >  qi : : lit ( " bool " ) )  >  - ( ( qi : : lit ( " init " )  >  boolExpression [ qi : : _a  =  qi : : _1 ] )  |  qi : : attr ( manager - > boolean ( false ) ) )  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createBooleanVariable ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _a ) ] ;  
			
		 
		
	
		
			
				 
				 
				            booleanVariableDefinition . name ( " boolean variable definition " ) ;  
				 
				 
				            booleanVariableDefinition . name ( " boolean variable definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            integerVariableDefinition  =  ( ( freshIdentifier  > >  qi : : lit ( " : " )  > >  qi : : lit ( " [ " ) )  >  expression_   >  qi : : lit ( " .. " )  >  expression_   >  qi : : lit ( " ] " )  >  - ( qi : : lit ( " init " )  >  expression_ [ qi : : _a  =  qi : : _1 ] )  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createIntegerVariable ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _3 ,  qi : : _a ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            integerVariableDefinition  =  ( ( ( freshIdentifier  >  qi : : lit ( " : " ) )   > >  qi : : lit ( " [ " ) )  >  intExpression   >  qi : : lit ( " .. " )  >  intExpression   >  qi : : lit ( " ] " )  >  - ( qi : : lit ( " init " )  >  intExpression [ qi : : _a  =  qi : : _1 ] )  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createIntegerVariable ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _3 ,  qi : : _a ) ] ;  
			
		 
		
	
		
			
				 
				 
				            integerVariableDefinition . name ( " integer variable definition " ) ;  
				 
				 
				            integerVariableDefinition . name ( " integer variable definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            clockVariableDefinition  =  ( ( freshIdentifier  > >  qi : : lit ( " : " )  > >  qi : : lit ( " clock " ) )  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createClockVariable ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            clockVariableDefinition  =  ( ( ( freshIdentifier  >  qi : : lit ( " : " ) )  > >  qi : : lit ( " clock " ) )  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createClockVariable ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            clockVariableDefinition . name ( " clock variable definition " ) ;  
				 
				 
				            clockVariableDefinition . name ( " clock variable definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            variableDefinition  =  ( booleanVariableDefinition [ phoenix : : push_back ( qi : : _r1 ,  qi : : _1 ) ]  |  integerVariableDefinition [ phoenix : : push_back ( qi : : _r2 ,  qi : : _1 ) ]  |  clockVariableDefinition [ phoenix : : push_back ( qi : : _r3 ,  qi : : _1 ) ] ) ;  
				 
				 
				            variableDefinition  =  ( booleanVariableDefinition [ phoenix : : push_back ( qi : : _r1 ,  qi : : _1 ) ]  |  integerVariableDefinition [ phoenix : : push_back ( qi : : _r2 ,  qi : : _1 ) ]  |  clockVariableDefinition [ phoenix : : push_back ( qi : : _r3 ,  qi : : _1 ) ] ) ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -143,33 +158,33 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				            globalVariableDefinition  =  ( qi : : lit ( " global " )  >  ( booleanVariableDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : globalBooleanVariables ,  qi : : _r1 ) ,  qi : : _1 ) ]  |  integerVariableDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : globalIntegerVariables ,  qi : : _r1 ) ,  qi : : _1 ) ] ) ) ;  
				 
				 
				            globalVariableDefinition  =  ( qi : : lit ( " global " )  >  ( booleanVariableDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : globalBooleanVariables ,  qi : : _r1 ) ,  qi : : _1 ) ]  |  integerVariableDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : globalIntegerVariables ,  qi : : _r1 ) ,  qi : : _1 ) ] ) ) ;  
			
		 
		
	
		
			
				 
				 
				            globalVariableDefinition . name ( " global variable declaration list " ) ;  
				 
				 
				            globalVariableDefinition . name ( " global variable declaration list " ) ;  
			
		 
		
	
		
			
				 
				 
				                         
				 
				 
				                         
			
		 
		
	
		
			
				 
				 
				            stateRewardDefinition  =  ( expression_   >  qi : : lit ( " : " )  >  expression_   > >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createStateReward ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            stateRewardDefinition  =  ( boolExpression   >  qi : : lit ( " : " )  >  num ericalE xpression  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createStateReward ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            stateRewardDefinition . name ( " state reward definition " ) ;  
				 
				 
				            stateRewardDefinition . name ( " state reward definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            stateActionRewardDefinition  =  ( qi : : lit ( " [ " )  > >   - identifier  > >  qi : : lit ( " ] " )  > >  expression_  > >  qi : : lit ( " : " )  > >   expression_   > >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createStateActionReward ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _3 ,  qi : : _r1 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            stateActionRewardDefinition  =  ( qi : : lit ( " [ " )  >  - identifier  >  qi : : lit ( " ] " )  >  boolExpression   >  qi : : lit ( " : " )  >  num ericalE xpression  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createStateActionReward ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _3 ,  qi : : _r1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            stateActionRewardDefinition . name ( " state action reward definition " ) ;  
				 
				 
				            stateActionRewardDefinition . name ( " state action reward definition " ) ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            transitionRewardDefinition  =  ( qi : : lit ( " [ " )  >  - identifier  >  qi : : lit ( " ] " )  >  expression_  >  qi : : lit ( " -> " )  >  expression_   >  qi : : lit ( " : " )  >  expression_  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createTransitionReward ,  phoenix : : ref ( * this ) ,  qi : : _1  ,  qi : : _2  ,  qi : : _3  ,  qi : : _4  ,  qi : : _r1 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            transitionRewardDefinition  =  ( ( qi : : lit ( " [ " )  >  - identifier [ qi : : _a  =  qi : : _1 ]   >  qi : : lit ( " ] " )  >  boolExpression [ qi : : _b  =  qi : : _1 ] )  > >  ( qi : : lit ( " -> " )  >  boolExpression [ qi : : _c  =  qi : : _1 ]   >  qi : : lit ( " : " )  >  num ericalE xpression[ qi : : _d  =  qi : : _1 ]   >  qi : : lit ( " ; " ) ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createTransitionReward ,  phoenix : : ref ( * this ) ,  qi : : _a  ,  qi : : _b  ,  qi : : _c  ,  qi : : _d  ,  qi : : _r1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            transitionRewardDefinition . name ( " transition reward definition " ) ;  
				 
				 
				            transitionRewardDefinition . name ( " transition reward definition " ) ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            freshRewardModelName  =  ( identifier [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isFreshRewardModelName ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				 
				 
				            freshRewardModelName  =  ( identifier [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isFreshRewardModelName ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            freshRewardModelName . name ( " fresh reward model name " ) ;  
				 
				 
				            freshRewardModelName . name ( " fresh reward model name " ) ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            rewardModelDefinition  =  ( qi : : lit ( " rewards " )  >  - ( qi : : lit ( " \" " )  >  freshRewardModelName [ qi : : _a  =  qi : : _1 ]  >  qi : : lit ( " \" " ) )  
				 
				 
				            rewardModelDefinition  =  ( qi : : lit ( " rewards " )  >  - ( qi : : lit ( " \" " )  >  freshRewardModelName [ qi : : _a  =  qi : : _1 ]  >  qi : : lit ( " \" " ) )  
			
		 
		
	
		
			
				 
				 
				                                     >  + (    stateRewardDefinition [ phoenix : : push_back ( qi : : _b  ,  qi : : _1 ) ]  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                                     >  + (    transitionRewardDefinition ( qi : : _r1 ) [ phoenix : : push_back ( qi : : _d  ,  qi : : _1 ) ]  
			
		 
		
	
		
			
				 
				 
				                                         |   stateActionRewardDefinition ( qi : : _r1 ) [ phoenix : : push_back ( qi : : _c ,  qi : : _1 ) ]  
				 
				 
				                                         |   stateActionRewardDefinition ( qi : : _r1 ) [ phoenix : : push_back ( qi : : _c ,  qi : : _1 ) ]  
			
		 
		
	
		
			
				 
				 
				                                         |   transitionRewardDefinition ( qi : : _r1 ) [ phoenix : : push_back ( qi : : _d  ,  qi : : _1 ) ]  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                                         |   stateRewardDefinition [ phoenix : : push_back ( qi : : _b  ,  qi : : _1 ) ]  
			
		 
		
	
		
			
				 
				 
				                                         )  
				 
				 
				                                         )  
			
		 
		
	
		
			
				 
				 
				                                     > >   qi : : lit ( " endrewards " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createRewardModel ,  phoenix : : ref ( * this ) ,  qi : : _a ,  qi : : _b ,  qi : : _c ,  qi : : _d ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                                     >  qi : : lit ( " endrewards " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createRewardModel ,  phoenix : : ref ( * this ) ,  qi : : _a ,  qi : : _b ,  qi : : _c ,  qi : : _d ) ] ;  
			
		 
		
	
		
			
				 
				 
				            rewardModelDefinition . name ( " reward model definition " ) ;  
				 
				 
				            rewardModelDefinition . name ( " reward model definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            initialStatesConstruct  =  ( qi : : lit ( " init " )  >  expression_   >  qi : : lit ( " endinit " ) ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : addInitialStatesConstruct ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _r1 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            initialStatesConstruct  =  ( qi : : lit ( " init " )  >  boolExpression   >  qi : : lit ( " endinit " ) ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : addInitialStatesConstruct ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _r1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            initialStatesConstruct . name ( " initial construct " ) ;  
				 
				 
				            initialStatesConstruct . name ( " initial construct " ) ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            observablesConstruct  =  ( qi : : lit ( " observables " )  >  ( identifier  %  qi : : lit ( " , " )  ) >  qi : : lit ( " endobservables " ) ) [ phoenix : : bind ( & PrismParser : : createObservablesList ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				 
				 
				            observablesConstruct  =  ( qi : : lit ( " observables " )  >  ( identifier  %  qi : : lit ( " , " )  ) >  qi : : lit ( " endobservables " ) ) [ phoenix : : bind ( & PrismParser : : createObservablesList ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            observablesConstruct . name ( " observables construct " ) ;  
				 
				 
				            observablesConstruct . name ( " observables construct " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            invariantConstruct  =  ( qi : : lit ( " invariant " )  >  expression_   >  qi : : lit ( " endinvariant " ) ) [ qi : : _val  =  qi : : _1 ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            invariantConstruct  =  ( qi : : lit ( " invariant " )  >  boolExpression   >  qi : : lit ( " endinvariant " ) ) [ qi : : _val  =  qi : : _1 ] ;  
			
		 
		
	
		
			
				 
				 
				            invariantConstruct . name ( " invariant construct " ) ;  
				 
				 
				            invariantConstruct . name ( " invariant construct " ) ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            knownModuleName  =  ( identifier [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isKnownModuleName ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				 
				 
				            knownModuleName  =  ( identifier [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isKnownModuleName ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -220,16 +235,17 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				            freshLabelName  =  ( identifier [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isFreshLabelName ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				 
				 
				            freshLabelName  =  ( identifier [ qi : : _val  =  qi : : _1 ] ) [ qi : : _pass  =  phoenix : : bind ( & PrismParser : : isFreshLabelName ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            freshLabelName . name ( " fresh label name " ) ;  
				 
				 
				            freshLabelName . name ( " fresh label name " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            labelDefinition  =  ( qi : : lit ( " label " )  >  - qi : : lit ( " \" " )  >  freshLabelName  >  - qi : : lit ( " \" " )  >  qi : : lit ( " = " )  >  expression_   >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createLabel ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            labelDefinition  =  ( qi : : lit ( " label " )  >  - qi : : lit ( " \" " )  >  freshLabelName  >  - qi : : lit ( " \" " )  >  qi : : lit ( " = " )  >  boolExpression   >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createLabel ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            labelDefinition . name ( " label definition " ) ;  
				 
				 
				            labelDefinition . name ( " label definition " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            assignmentDefinition  =  ( qi : : lit ( " ( " )  >  identifier  >  qi : : lit ( " ' " )  >  qi : : lit ( " = " )  >  expression_  >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createAssignment ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            assignmentDefinition  =  ( ( qi : : lit ( " ( " )  > >  identifier  > >   qi : : lit ( " ' " ) )  >  qi : : lit ( " = " )  >  expression_  >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createAssignment ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            assignmentDefinition . name ( " assignment " ) ;  
				 
				 
				            assignmentDefinition . name ( " assignment " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            assignmentDefinitionList  =  ( assignmentDefinition  %  " & " ) [ qi : : _val  =  qi : : _1 ]  |  ( qi : : lit ( " true " ) ) [ qi : : _val  =  phoenix : : construct < std : : vector < storm : : prism : : Assignment > > ( ) ] ;  
				 
				 
				            assignmentDefinitionList  =  ( assignmentDefinition  %  " & " ) [ qi : : _val  =  qi : : _1 ]  |  ( qi : : lit ( " true " ) ) [ qi : : _val  =  phoenix : : construct < std : : vector < storm : : prism : : Assignment > > ( ) ] ;  
			
		 
		
	
		
			
				 
				 
				            assignmentDefinitionList . name ( " assignment list " ) ;  
				 
				 
				            assignmentDefinitionList . name ( " assignment list " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            updateDefinition  =  ( ( ( expression_  > >  qi : : lit ( " : " ) )  |  qi : : attr ( manager - > rational ( 1 ) ) )  > >  assignmentDefinitionList ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createUpdate ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _r1 ) ] ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            updateDefinition  =  ( assignmentDefinitionList [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createUpdate ,  phoenix : : ref ( * this ) ,  manager - > rational ( 1 ) ,  qi : : _1 ,  qi : : _r1 ) ]  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    |  ( ( numericalExpression  >  qi : : lit ( " : " )  >  assignmentDefinitionList ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createUpdate ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _r1 ) ] ) ) ;  
			
		 
		
	
		
			
				 
				 
				            updateDefinition . name ( " update " ) ;  
				 
				 
				            updateDefinition . name ( " update " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				            updateListDefinition  % =  + updateDefinition ( qi : : _r1 )  %  " + " ;  
				 
				 
				            updateListDefinition  % =  + updateDefinition ( qi : : _r1 )  %  " + " ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -239,7 +255,7 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				            commandDefinition  =  ( ( ( qi : : lit ( " [ " )  >  - identifier  >  qi : : lit ( " ] " ) )  
				 
				 
				            commandDefinition  =  ( ( ( qi : : lit ( " [ " )  >  - identifier  >  qi : : lit ( " ] " ) )  
			
		 
		
	
		
			
				 
				 
				                                  |  
				 
				 
				                                  |  
			
		 
		
	
		
			
				 
				 
				                                 ( qi : : lit ( " < " )  >  - identifier  >  qi : : lit ( " > " ) [ qi : : _a  =  true ] ) )  
				 
				 
				                                 ( qi : : lit ( " < " )  >  - identifier  >  qi : : lit ( " > " ) [ qi : : _a  =  true ] ) )  
			
		 
		
	
		
			
				 
				 
				                                 >  + ( qi : : char_  -  qi : : lit ( " ; " ) )  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                                 >  + ( qi : : char_  -  ( qi : : lit ( " ; " )  |  qi : : lit ( " endmodule " ) ) )  
			
		 
		
	
		
			
				 
				 
				                                 >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDummyCommand ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _r1 ) ] ;  
				 
				 
				                                 >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createDummyCommand ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _r1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            commandDefinition . name ( " command definition " ) ;  
				 
				 
				            commandDefinition . name ( " command definition " ) ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -309,6 +325,9 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				                                 >  updateListDefinition ( qi : : _r1 )  
				 
				 
				                                 >  updateListDefinition ( qi : : _r1 )  
			
		 
		
	
		
			
				 
				 
				                                 >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createCommand ,  phoenix : : ref ( * this ) ,  qi : : _a ,  qi : : _1 ,  qi : : _2 ,  qi : : _3 ,  qi : : _r1 ) ] ;  
				 
				 
				                                 >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createCommand ,  phoenix : : ref ( * this ) ,  qi : : _a ,  qi : : _1 ,  qi : : _2 ,  qi : : _3 ,  qi : : _r1 ) ] ;  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            auto  setLocationInfoFunction  =  this - > annotate ( qi : : _val ,  qi : : _1 ,  qi : : _3 ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            qi : : on_success ( commandDefinition ,  setLocationInfoFunction ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            formulaDefinition  =  ( qi : : lit ( " formula " )  >  identifier  >  qi : : lit ( " = " )  >  * expressionParser  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createFormulaSecondRun ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				 
				 
				            formulaDefinition  =  ( qi : : lit ( " formula " )  >  identifier  >  qi : : lit ( " = " )  >  * expressionParser  >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PrismParser : : createFormulaSecondRun ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
			
		 
		
	
		
			
				 
				 
				            formulaDefinition . name ( " formula definition " ) ;  
				 
				 
				            formulaDefinition . name ( " formula definition " ) ;  
			
		 
		
	
		
			
				 
				 
				            this - > secondRun  =  true ;  
				 
				 
				            this - > secondRun  =  true ;  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -324,7 +343,7 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
		
			
				 
				 
				        void  PrismParser : : createFormulaIdentifiers ( std : : vector < storm : : prism : : Formula >  const &  formulas )  {  
				 
				 
				        void  PrismParser : : createFormulaIdentifiers ( std : : vector < storm : : prism : : Formula >  const &  formulas )  {  
			
		 
		
	
		
			
				 
				 
				            STORM_LOG_THROW ( formulas . size ( )  = =  this - > formulaExpressions . size ( ) ,  storm : : exceptions : : UnexpectedException ,  " Unexpected number of formulas and formula expressions " ) ;  
				 
				 
				            STORM_LOG_THROW ( formulas . size ( )  = =  this - > formulaExpressions . size ( ) ,  storm : : exceptions : : UnexpectedException ,  " Unexpected number of formulas and formula expressions " ) ;  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            this - > formulaOrder . clear ( ) ;  
			
		 
		
	
		
			
				 
				 
				            storm : : storage : : BitVector  unprocessed ( formulas . size ( ) ,  true ) ;  
				 
				 
				            storm : : storage : : BitVector  unprocessed ( formulas . size ( ) ,  true ) ;  
			
		 
		
	
		
			
				 
				 
				            // It might be that formulas are declared in a weird order.
  
				 
				 
				            // It might be that formulas are declared in a weird order.
  
			
		 
		
	
		
			
				 
				 
				            // We follow a trial-and-error approach: If we can not parse the expression for one formula,
  
				 
				 
				            // We follow a trial-and-error approach: If we can not parse the expression for one formula,
  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -338,6 +357,7 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				                    if  ( expression . isInitialized ( ) )  {  
				 
				 
				                    if  ( expression . isInitialized ( ) )  {  
			
		 
		
	
		
			
				 
				 
				                        progress  =  true ;  
				 
				 
				                        progress  =  true ;  
			
		 
		
	
		
			
				 
				 
				                        unprocessed . set ( formulaIndex ,  false ) ;  
				 
				 
				                        unprocessed . set ( formulaIndex ,  false ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                        formulaOrder . push_back ( formulaIndex ) ;  
			
		 
		
	
		
			
				 
				 
				                        storm : : expressions : : Variable  variable ;  
				 
				 
				                        storm : : expressions : : Variable  variable ;  
			
		 
		
	
		
			
				 
				 
				                        try  {  
				 
				 
				                        try  {  
			
		 
		
	
		
			
				 
				 
				                            if  ( expression . hasIntegerType ( ) )  {  
				 
				 
				                            if  ( expression . hasIntegerType ( ) )  {  
			
		 
		
	
	
		
			
				
					
					
					
						
							 
						 
					
				 
				@ -361,7 +381,7 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				                    STORM_LOG_ERROR ( " Parsing error in  "  < <  this - > getFilename ( )  < <  " : Invalid expression for formula ' "  < <  formulas [ formulaIndex ] . getName ( )  < <  " ' at line ' "  < <  formulas [ formulaIndex ] . getLineNumber ( )  < <  " ': \n \t "  < <  formulaExpressions [ formulaIndex ] ) ;  
				 
				 
				                    STORM_LOG_ERROR ( " Parsing error in  "  < <  this - > getFilename ( )  < <  " : Invalid expression for formula ' "  < <  formulas [ formulaIndex ] . getName ( )  < <  " ' at line ' "  < <  formulas [ formulaIndex ] . getLineNumber ( )  < <  " ': \n \t "  < <  formulaExpressions [ formulaIndex ] ) ;  
			
		 
		
	
		
			
				 
				 
				                }  
				 
				 
				                }  
			
		 
		
	
		
			
				 
				 
				                STORM_LOG_THROW ( unprocessed . getNumberOfSetBits ( )  = =  1 ,  storm : : exceptions : : WrongFormatException ,  " Unable to parse expressions for  "  < <  unprocessed . getNumberOfSetBits ( )  < <  "  formulas. This could be due to circular dependencies " ) ;  
				 
				 
				                STORM_LOG_THROW ( unprocessed . getNumberOfSetBits ( )  = =  1 ,  storm : : exceptions : : WrongFormatException ,  " Unable to parse expressions for  "  < <  unprocessed . getNumberOfSetBits ( )  < <  "  formulas. This could be due to circular dependencies " ) ;  
			
		 
		
	
		
			
				 
				 
				                STORM_LOG_THROW ( false ,  storm : : exceptions : : WrongFormatException ,  " Unable to parse expression for formula ' "  < <  formulas [ unprocessed . getNextSetIndex ( 0 ) ] . getName ( )  < <  " ' formulas . " ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                STORM_LOG_THROW ( false ,  storm : : exceptions : : WrongFormatException ,  " Unable to parse expression for formula ' "  < <  formulas [ unprocessed . getNextSetIndex ( 0 ) ] . getName ( )  < <  " '. " ) ;  
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -436,7 +456,7 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				            return  ! this - > secondRun  | |  expression . hasIntegerType ( ) ;  
				 
				 
				            return  ! this - > secondRun  | |  expression . hasIntegerType ( ) ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
		
			
				 
				 
				        bool  PrismParser : : isOfDouble Type ( storm : : expressions : : Expression  const &  expression )  {  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				        bool  PrismParser : : isOfNumerical Type ( storm : : expressions : : Expression  const &  expression )  {  
			
		 
		
	
		
			
				 
				 
				            return  ! this - > secondRun  | |  expression . hasNumericalType ( ) ;  
				 
				 
				            return  ! this - > secondRun  | |  expression . hasNumericalType ( ) ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
	
		
			
				
					
						
							 
						 
					
					
						
							 
						 
					
					
				 
				@ -905,8 +925,16 @@ namespace storm { 
			
		 
		
	
		
			
				 
				 
				                finalModelType  =  storm : : prism : : Program : : ModelType : : MDP ;  
				 
				 
				                finalModelType  =  storm : : prism : : Program : : ModelType : : MDP ;  
			
		 
		
	
		
			
				 
				 
				            }  
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				             
				 
				 
				             
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            // make sure formulas are stored in a proper order.
  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            std : : vector < storm : : prism : : Formula >  orderedFormulas ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            if  ( this - > secondRun )  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                orderedFormulas . reserve ( globalProgramInformation . formulas . size ( ) ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                for  ( uint64_t  const &  i  :  formulaOrder )  {  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                    orderedFormulas . push_back ( std : : move ( globalProgramInformation . formulas [ i ] ) ) ;  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				                }  
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            }  
			
		 
		
	
		
			
				 
				 
				
 
				 
				 
				
 
			
		 
		
	
		
			
				 
				 
				            return  storm : : prism : : Program ( manager ,  finalModelType ,  globalProgramInformation . constants ,  globalProgramInformation . globalBooleanVariables ,  globalProgramInformation . globalIntegerVariables ,  globalProgramInformation . formulas ,  globalProgramInformation . modules ,  globalProgramInformation . actionIndices ,  globalProgramInformation . rewardModels ,  globalProgramInformation . labels ,  secondRun  & &  ! globalProgramInformation . hasInitialConstruct  ?  boost : : none  :  boost : : make_optional ( globalProgramInformation . initialConstruct ) ,  globalProgramInformation . systemCompositionConstruct ,  prismCompatibility ,  this - > getFilename ( ) ,  1 ,  this - > secondRun ) ;  
				 
				 
				 
			
		 
		
	
		
			
				 
				 
				 
				 
				 
				            return  storm : : prism : : Program ( manager ,  finalModelType ,  globalProgramInformation . constants ,  globalProgramInformation . globalBooleanVariables ,  globalProgramInformation . globalIntegerVariables ,  orderedF ormulas,  globalProgramInformation . modules ,  globalProgramInformation . actionIndices ,  globalProgramInformation . rewardModels ,  globalProgramInformation . labels ,  secondRun  & &  ! globalProgramInformation . hasInitialConstruct  ?  boost : : none  :  boost : : make_optional ( globalProgramInformation . initialConstruct ) ,  globalProgramInformation . systemCompositionConstruct ,  prismCompatibility ,  this - > getFilename ( ) ,  1 ,  this - > secondRun ) ;  
			
		 
		
	
		
			
				 
				 
				        }  
				 
				 
				        }  
			
		 
		
	
		
			
				 
				 
				         
				 
				 
				         
			
		 
		
	
		
			
				 
				 
				        void  PrismParser : : removeInitialConstruct ( GlobalProgramInformation &  globalProgramInformation )  const  {  
				 
				 
				        void  PrismParser : : removeInitialConstruct ( GlobalProgramInformation &  globalProgramInformation )  const  {