@ -75,7 +75,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                                    qi : : lit ( " } " ) ) [ qi : : _val  =  phoenix : : bind ( & PgclParser : : createProgram ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _3 ,  qi : : _4 ) ] ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            sequenceOfStatements  % =  + ( statement ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					             
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            variableDeclarations  % =  qi : : lit ( " var " )  > >  qi : : lit ( " { " )  > >  + integerDeclaration  > >  qi : : lit ( " } " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            variableDeclarations  % =  qi : : lit ( " var " )  > >  qi : : lit ( " { " )  > >  + ( integerDeclaration  |  booleanDeclaration )   > >  qi : : lit ( " } " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            variableDeclarations . name ( " variable declarations " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // Statements
  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -86,6 +86,7 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // Simple statements
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            doubleDeclaration            =  ( qi : : lit ( " double  " )  > >  variableName ) [ qi : : _val  =  phoenix : : bind ( & PgclParser : : declareDoubleVariable ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            integerDeclaration  =  ( qi : : lit ( " int  " )  > >  variableName  > >  qi : : lit ( " := " )  > >  expression  > >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PgclParser : : createIntegerDeclarationStatement ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            booleanDeclaration  =  ( qi : : lit ( " bool  " )  > >  variableName  > >  qi : : lit ( " := " )  > >  expression  > >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PgclParser : : createBooleanDeclarationStatement ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            assignmentStatement          =  ( variableName  > >  qi : : lit ( " := " )  > >  ( expression  |  uniformExpression )  > >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PgclParser : : createAssignmentStatement ,  phoenix : : ref ( * this ) ,  qi : : _1 ,  qi : : _2 ) ] ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            observeStatement             =  ( qi : : lit ( " observe " )  > >  qi : : lit ( " ( " )  > >  booleanCondition  > >  qi : : lit ( " ) " )  > >  qi : : lit ( " ; " ) ) [ qi : : _val  =  phoenix : : bind ( & PgclParser : : createObserveStatement ,  phoenix : : ref ( * this ) ,  qi : : _1 ) ] ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -197,6 +198,23 @@ namespace storm { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            return  newAssignment ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : shared_ptr < storm : : pgcl : : AssignmentStatement >  PgclParser : : createBooleanDeclarationStatement ( std : : string  const &  variableName ,  storm : : expressions : : Expression  const &  assignedExpression )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            storm : : expressions : : Variable  variable ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if ( ! ( * expressionManager ) . hasVariable ( variableName ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                variable  =  ( * expressionManager ) . declareBooleanVariable ( variableName ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                this - > identifiers_ . add ( variableName ,  variable . getExpression ( ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // In case that a declaration already happened.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                variable  =  ( * expressionManager ) . getVariable ( variableName ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                STORM_LOG_THROW ( false ,  storm : : exceptions : : WrongFormatException ,  " Declaration of boolean variable  "  < <  variableName  < <  "  which was already declared previously. " ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : shared_ptr < storm : : pgcl : : AssignmentStatement >  newAssignment ( new  storm : : pgcl : : AssignmentStatement ( variable ,  assignedExpression ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            newAssignment - > setLocationNumber ( this - > currentLocationNumber ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            this - > locationToStatement . insert ( this - > locationToStatement . begin ( )  +  this - > currentLocationNumber ,  newAssignment ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            currentLocationNumber + + ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            return  newAssignment ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        std : : shared_ptr < storm : : pgcl : : ObserveStatement >  PgclParser : : createObserveStatement ( storm : : pgcl : : BooleanExpression  const &  condition )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            std : : shared_ptr < storm : : pgcl : : ObserveStatement >  observe ( new  storm : : pgcl : : ObserveStatement ( condition ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            this - > observeCreated  =  true ;