@ -88,7 +88,7 @@ struct PrismParser::PrismGrammar : qi::grammar<Iterator, storm::ir::Program(), q
atomicIntegerExpression . name ( " integer expression " ) ;
integerMultExpression % = atomicIntegerExpression [ qi : : _val = qi : : _1 ] > > * ( qi : : lit ( " * " ) > > atomicIntegerExpression ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : TIMES ) ) ] ;
integerMultExpression . name ( " integer expression " ) ;
integerPlusExpression = integerMultExpression [ qi : : _val = qi : : _1 ] > > * ( qi : : lit ( " + " ) > > integerMultExpression ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : PLUS ) ) ] ;
integerPlusExpression = integerMultExpression [ qi : : _val = qi : : _1 ] > > * ( ( qi : : lit ( " + " ) [ qi : : _a = true ] | qi : : lit ( " - " ) [ qi : : _a = false ] ) > > integerMultExpression ) [ phoenix : : if_ ( qi : : _a ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : PLUS ) ) ] . else_ [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : MINUS ) ) ] ] ;
integerPlusExpression . name ( " integer expression " ) ;
integerExpression % = integerPlusExpression ;
integerExpression . name ( " integer expression " ) ;
@ -98,7 +98,7 @@ struct PrismParser::PrismGrammar : qi::grammar<Iterator, storm::ir::Program(), q
constantAtomicIntegerExpression . name ( " constant integer expression " ) ;
constantIntegerMultExpression % = constantAtomicIntegerExpression [ qi : : _val = qi : : _1 ] > > * ( qi : : lit ( " * " ) > > constantAtomicIntegerExpression ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : TIMES ) ) ] ;
constantIntegerMultExpression . name ( " constant integer expression " ) ;
constantIntegerPlusExpression = constantIntegerMultExpression [ qi : : _val = qi : : _1 ] > > * ( qi : : lit ( " + " ) > > constantIntegerMultExpression ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : PLUS ) ) ] ;
constantIntegerPlusExpression = constantIntegerMultExpression [ qi : : _val = qi : : _1 ] > > * ( ( qi : : lit ( " + " ) [ qi : : _a = true ] | qi : : lit ( " - " ) [ qi : : _a = false ] ) > > constantIntegerMultExpression ) [ phoenix : : if_ ( qi : : _a ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : PLUS ) ) ] . else_ [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : MINUS ) ) ] ] ;
constantIntegerPlusExpression . name ( " constant integer expression " ) ;
constantIntegerExpression % = constantIntegerPlusExpression ;
constantIntegerExpression . name ( " constant integer expression " ) ;
@ -106,9 +106,9 @@ struct PrismParser::PrismGrammar : qi::grammar<Iterator, storm::ir::Program(), q
// This block defines all expressions of type double that are by syntax constant. That is, they are evaluable given the values for all constants.
constantAtomicDoubleExpression % = ( qi : : lit ( " ( " ) > > constantDoubleExpression > > qi : : lit ( " ) " ) | doubleConstantExpression ) ;
constantAtomicDoubleExpression . name ( " constant double expression " ) ;
constantDoubleMultExpression % = constantAtomicDoubleExpression [ qi : : _val = qi : : _1 ] > > * ( qi : : lit ( " * " ) > > constantAtomicDoubleExpression ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : double_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : TIMES ) ) ] ;
constantDoubleMultExpression % = constantAtomicDoubleExpression [ qi : : _val = qi : : _1 ] > > * ( ( qi : : lit ( " * " ) [ qi : : _a = true ] | qi : : lit ( " / " ) [ qi : : _a = false ] ) > > constantAtomicDoubleExpression ) [ phoenix : : if_ ( qi : : _a ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : double_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : TIMES ) ) ] . else_ [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : double_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : DIVIDE ) ) ] ] ;
constantDoubleMultExpression . name ( " constant double expression " ) ;
constantDoublePlusExpression % = constantDoubleMultExpression [ qi : : _val = qi : : _1 ] > > * ( qi : : lit ( " + " ) > > constantDoubleMultExpression ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : double_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : PLUS ) ) ] ;
constantDoublePlusExpression % = constantDoubleMultExpression [ qi : : _val = qi : : _1 ] > > * ( ( qi : : lit ( " + " ) [ qi : : _a = true ] | qi : : lit ( " - " ) [ qi : : _a = false ] ) > > constantDoubleMultExpression ) [ phoenix : : if_ ( qi : : _a ) [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : double_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : PLUS ) ) ] . else_ [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BinaryNumericalFunctionExpression > ( storm : : ir : : expressions : : BaseExpression : : double_ , qi : : _val , qi : : _1 , storm : : ir : : expressions : : BinaryNumericalFunctionExpression : : MINUS ) ) ] ] ;
constantDoublePlusExpression . name ( " constant double expression " ) ;
constantDoubleExpression % = constantDoublePlusExpression ;
constantDoubleExpression . name ( " constant double expression " ) ;
@ -186,9 +186,9 @@ struct PrismParser::PrismGrammar : qi::grammar<Iterator, storm::ir::Program(), q
commandDefinition . name ( " command " ) ;
// This block defines all entities that are neede for parsing variable definitions.
booleanVariableDefinition = ( freeIdentifierName > > qi : : lit ( " : " ) > > qi : : lit ( " bool " ) > - ( qi : : lit ( " init " ) > constantBooleanExpression [ qi : : _b = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( qi : : _1 ) ] ) > qi : : lit ( " ; " ) ) [ phoenix : : push_back ( qi : : _r1 , phoenix : : construct < storm : : ir : : BooleanVariable > ( phoenix : : val ( nextBooleanVariableIndex ) , phoenix : : val ( qi : : _1 ) , qi : : _b ) ) , phoenix : : insert ( qi : : _r2 , phoenix : : construct < std : : pair < std : : string , uint_fast64_t > > ( qi : : _1 , phoenix : : val ( nextBooleanVariableIndex ) ) ) , qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : VariableExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : VariableExpression > ( storm : : ir : : expressions : : BaseExpression : : bool_ , phoenix : : val ( nextBooleanVariableIndex ) , qi : : _1 ) ) , phoenix : : bind ( booleanVariables_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( booleanVariableNames_ . add , qi : : _1 , qi : : _1 ) , phoenix : : bind ( localBooleanVariables_ . add , qi : : _1 , qi : : _1 ) , phoenix : : ref ( nextBooleanVariableIndex ) + + ] ;
booleanVariableDefinition = ( freeIdentifierName > > qi : : lit ( " : " ) > > qi : : lit ( " bool " ) > - ( qi : : lit ( " init " ) > constantBooleanExpression [ qi : : _b = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( qi : : _1 ) ] ) > qi : : lit ( " ; " ) ) [ phoenix : : push_back ( qi : : _r1 , phoenix : : construct < storm : : ir : : BooleanVariable > ( phoenix : : ref ( nextBooleanVariableIndex ) , phoenix : : val ( qi : : _1 ) , qi : : _b ) ) , phoenix : : insert ( qi : : _r2 , phoenix : : construct < std : : pair < std : : string , uint_fast64_t > > ( qi : : _1 , phoenix : : ref ( nextBooleanVariableIndex ) ) ) , qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : VariableExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : VariableExpression > ( storm : : ir : : expressions : : BaseExpression : : bool_ , phoenix : : ref ( nextBooleanVariableIndex ) , qi : : _1 ) ) , phoenix : : bind ( booleanVariables_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( booleanVariableNames_ . add , qi : : _1 , qi : : _1 ) , phoenix : : bind ( localBooleanVariables_ . add , qi : : _1 , qi : : _1 ) , phoenix : : ref ( nextBooleanVariableIndex ) = phoenix : : ref ( nextBooleanVariableIndex ) + 1 ] ;
booleanVariableDefinition . name ( " boolean variable declaration " ) ;
integerVariableDefinition = ( freeIdentifierName > qi : : lit ( " : " ) > qi : : lit ( " [ " ) > constantIntegerExpression > qi : : lit ( " .. " ) > constantIntegerExpression > qi : : lit ( " ] " ) > - ( qi : : lit ( " init " ) > constantIntegerExpression [ qi : : _b = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( qi : : _1 ) ] ) > qi : : lit ( " ; " ) ) [ phoenix : : push_back ( qi : : _r1 , phoenix : : construct < storm : : ir : : IntegerVariable > ( phoenix : : val ( nextIntegerVariableIndex ) , qi : : _1 , qi : : _2 , qi : : _3 , qi : : _b ) ) , phoenix : : insert ( qi : : _r2 , phoenix : : construct < std : : pair < std : : string , uint_fast64_t > > ( qi : : _1 , phoenix : : val ( nextIntegerVariableIndex ) ) ) , qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : VariableExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : VariableExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , phoenix : : val ( nextIntegerVariableIndex ) , qi : : _1 ) ) , phoenix : : bind ( integerVariables_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( integerVariableNames_ . add , qi : : _1 , qi : : _1 ) , phoenix : : bind ( localIntegerVariables_ . add , qi : : _1 , qi : : _1 ) , phoenix : : ref ( nextIntegerVariableIndex ) + + ] ;
integerVariableDefinition = ( freeIdentifierName > qi : : lit ( " : " ) > qi : : lit ( " [ " ) > constantIntegerExpression > qi : : lit ( " .. " ) > constantIntegerExpression > qi : : lit ( " ] " ) > - ( qi : : lit ( " init " ) > constantIntegerExpression [ qi : : _b = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( qi : : _1 ) ] ) > qi : : lit ( " ; " ) ) [ phoenix : : push_back ( qi : : _r1 , phoenix : : construct < storm : : ir : : IntegerVariable > ( phoenix : : ref ( nextIntegerVariableIndex ) , qi : : _1 , qi : : _2 , qi : : _3 , qi : : _b ) ) , phoenix : : insert ( qi : : _r2 , phoenix : : construct < std : : pair < std : : string , uint_fast64_t > > ( qi : : _1 , phoenix : : ref ( nextIntegerVariableIndex ) ) ) , qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : VariableExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : VariableExpression > ( storm : : ir : : expressions : : BaseExpression : : int_ , phoenix : : ref ( nextIntegerVariableIndex ) , qi : : _1 ) ) , phoenix : : bind ( integerVariables_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( integerVariableNames_ . add , qi : : _1 , qi : : _1 ) , phoenix : : bind ( localIntegerVariables_ . add , qi : : _1 , qi : : _1 ) , phoenix : : ref ( nextIntegerVariableIndex ) = phoenix : : ref ( nextIntegerVariableIndex ) + 1 ] ;
integerVariableDefinition . name ( " integer variable declaration " ) ;
variableDefinition = ( booleanVariableDefinition ( qi : : _r1 , qi : : _r3 ) | integerVariableDefinition ( qi : : _r2 , qi : : _r4 ) ) ;
variableDefinition . name ( " variable declaration " ) ;
@ -297,18 +297,18 @@ struct PrismParser::PrismGrammar : qi::grammar<Iterator, storm::ir::Program(), q
// Rules with integer result type.
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > integerExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > integerPlusExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , qi : : locals < bool > , Skipper > integerPlusExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > integerMultExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > atomicIntegerExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantIntegerExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantIntegerPlusExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , qi : : locals < bool > , Skipper > constantIntegerPlusExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantIntegerMultExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantAtomicIntegerExpression ;
// Rules with double result type.
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantDoubleExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantDoublePlusExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantDoubleMultExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , qi : : locals < bool > , Skipper > constantDoublePlusExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , qi : : locals < bool > , Skipper > constantDoubleMultExpression ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantAtomicDoubleExpression ;
// Rules for variable recognition.