@ -36,7 +36,7 @@ namespace boost { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					namespace  storm  {  
			
		
	
		
			
				
					    namespace  parser  {  
			
		
	
		
			
				
					        ExpressionParser : : ExpressionParser ( storm : : expressions : : ExpressionManager  const &  manager ,  qi : : symbols < char ,  uint_fast64_t >  const &  invalidIdentifiers_ ,  bool  enableErrorHandling ,  bool  allowBacktracking )  :  ExpressionParser : : base_type ( expression ) ,  orOperator_ ( ) ,  andOperator_ ( ) ,  equalityOperator_ ( ) ,  relationalOperator_ ( ) ,  plusOperator_ ( ) ,  multiplicationOperator_ ( ) ,  infixPowerOperator_ ( ) ,  unaryOperator_ ( ) ,  floorCeilOperator_ ( ) ,  minMaxOperator_ ( ) ,  prefixPowerOperator_ ( ) ,  invalidIdentifiers_ ( invalidIdentifiers_ )  {  
			
		
	
		
			
				
					        ExpressionParser : : ExpressionParser ( storm : : expressions : : ExpressionManager  const &  manager ,  qi : : symbols < char ,  uint_fast64_t >  const &  invalidIdentifiers_ ,  bool  enableErrorHandling ,  bool  allowBacktracking )  :  ExpressionParser : : base_type ( expression ) ,  orOperator_ ( ) ,  andOperator_ ( ) ,  equalityOperator_ ( ) ,  relationalOperator_ ( ) ,  plusOperator_ ( ) ,  multiplicationOperator_ ( ) ,  infixPowerModulo Operator_ ( ) ,  unaryOperator_ ( ) ,  floorCeilOperator_ ( ) ,  minMaxOperator_ ( ) ,  prefixPowerModulo Operator_ ( ) ,  invalidIdentifiers_ ( invalidIdentifiers_ )  {  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            expressionCreator  =  new  ExpressionCreator ( manager ) ;  
			
		
	
		
			
				
					             
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -58,11 +58,13 @@ namespace storm { 
			
		
	
		
			
				
					            minMaxExpression . name ( " min/max expression " ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            if  ( allowBacktracking )  {  
			
		
	
		
			
				
					                prefixPowerExpression  =  ( ( prefixPowerOperator_  > >  qi : : lit ( " ( " ) )  > >  expression  > >  qi : : lit ( " , " )  > >  expression  > >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _2 ,  qi : : _1 ,  qi : : _3 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					                prefixPowerModuloExpression  =  ( ( prefixPowerModuloOperator_  > >  qi : : lit ( " ( " ) )  > >  expression  > >  qi : : lit ( " , " )  > >  expression  > >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerModuloExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _2 ,  qi : : _1 ,  qi : : _3 ,  qi : : _pass ) ]  
			
		
	
		
			
				
					                |  ( qi : : lit ( " func " )  > >  qi : : lit ( " ( " )  > >  prefixPowerModuloOperator_  > >  qi : : lit ( " , " )  > >  expression  > >  qi : : lit ( " , " )  > >  expression  > >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerModuloExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _2 ,  qi : : _1 ,  qi : : _3 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                prefixPowerExpression  =  ( ( prefixPowerOperator_  > >  qi : : lit ( " ( " ) )  >  expression  >  qi : : lit ( " , " )  >  expression  >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _2 ,  qi : : _1 ,  qi : : _3 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					                prefixPowerModuloExpression  =  ( ( prefixPowerModuloOperator_  > >  qi : : lit ( " ( " ) )  >  expression  >  qi : : lit ( " , " )  >  expression  >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerModuloExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _2 ,  qi : : _1 ,  qi : : _3 ,  qi : : _pass ) ]  
			
		
	
		
			
				
					                |  ( ( qi : : lit ( " func " )  > >  qi : : lit ( " ( " ) )  >  prefixPowerModuloOperator_  >  qi : : lit ( " , " )  >  expression  >  qi : : lit ( " , " )  >  expression  >  qi : : lit ( " ) " ) ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerModuloExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _2 ,  qi : : _1 ,  qi : : _3 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            prefixPowerExpression . name ( " pow expression " ) ;  
			
		
	
		
			
				
					            prefixPowerModulo Expression . name ( " power/modulo  expression " ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
								identifierExpression  =  identifier [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : getIdentifierExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _1 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            identifierExpression . name ( " identifier expression " ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -73,23 +75,23 @@ namespace storm { 
			
		
	
		
			
				
					                |  qi : : int_ [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createIntegerLiteralExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _1 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            literalExpression . name ( " literal expression " ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            atomicExpression  =  floorCeilExpression  |  prefixPowerExpression  |  minMaxExpression  |  ( qi : : lit ( " ( " )  > >  expression  > >  qi : : lit ( " ) " ) )  |  identifierExpression  |  literalExpression ;  
			
		
	
		
			
				
					            atomicExpression  =  floorCeilExpression  |  prefixPowerModulo Expression  |  minMaxExpression  |  ( qi : : lit ( " ( " )  > >  expression  > >  qi : : lit ( " ) " ) )  |  identifierExpression  |  literalExpression ;  
			
		
	
		
			
				
					            atomicExpression . name ( " atomic expression " ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            unaryExpression  =  ( - unaryOperator_  > >  atomicExpression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createUnaryExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            unaryExpression . name ( " unary expression " ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            if  ( allowBacktracking )  {  
			
		
	
		
			
				
					                infixPowerExpression  =  unaryExpression [ qi : : _val  =  qi : : _1 ]  > >  - ( infixPowerOperator_  > >  expression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					                infixPowerModulo Expression  =  unaryExpression [ qi : : _val  =  qi : : _1 ]  > >  - ( infixPowerModulo Operator_  > >  expression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerModulo Expression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                infixPowerExpression  =  unaryExpression [ qi : : _val  =  qi : : _1 ]  >  - ( infixPowerOperator_  > >  expression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					                infixPowerModulo Expression  =  unaryExpression [ qi : : _val  =  qi : : _1 ]  >  - ( infixPowerModulo Operator_  > >  expression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createPowerModulo Expression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            infixPowerExpression . name ( " power expression " ) ;  
			
		
	
		
			
				
					            infixPowerModulo Expression . name ( " power/modulo  expression " ) ;  
			
		
	
		
			
				
					             
			
		
	
		
			
				
					            if  ( allowBacktracking )  {  
			
		
	
		
			
				
					                multiplicationExpression  =  infixPowerExpression [ qi : : _val  =  qi : : _1 ]  > >  * ( multiplicationOperator_  > >  infixPowerExpression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createMultExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					                multiplicationExpression  =  infixPowerModulo Expression [ qi : : _val  =  qi : : _1 ]  > >  * ( multiplicationOperator_  > >  infixPowerModulo Expression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createMultExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            }  else  {  
			
		
	
		
			
				
					                multiplicationExpression  =  infixPowerExpression [ qi : : _val  =  qi : : _1 ]  >  * ( multiplicationOperator_  >  infixPowerExpression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createMultExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					                multiplicationExpression  =  infixPowerModulo Expression [ qi : : _val  =  qi : : _1 ]  >  * ( multiplicationOperator_  >  infixPowerModulo Expression ) [ qi : : _val  =  phoenix : : bind ( & ExpressionCreator : : createMultExpression ,  phoenix : : ref ( * expressionCreator ) ,  qi : : _val ,  qi : : _1 ,  qi : : _2 ,  qi : : _pass ) ] ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            multiplicationExpression . name ( " multiplication expression " ) ;