@ -58,7 +58,8 @@ public:
} catch ( const qi : : expectation_failure < pos_iterator_type > & e ) {
const boost : : spirit : : classic : : file_position_base < std : : string > & pos = e . first . get_position ( ) ;
std : : stringstream msg ;
msg < < " parse error at file ' " < < pos . file < < " ' line " < < pos . line < < " column " < < pos . column < < std : : endl < < " ' " < < e . first . get_currentline ( ) < < " ' " < < std : : endl < < std : : setw ( pos . column ) < < " " < < " ^- here " ;
msg < < " parse error at file ' " < < pos . file < < " ' line " < < pos . line < < " column " < < pos . column < < std : : endl < < " ' " < < e . first . get_currentline ( ) < < " ' " < < std : : endl < < std : : setw ( pos . column + 1 ) < < " " < < " ^------- here " ;
std : : cout < < msg . str ( ) < < std : : endl ;
throw storm : : exceptions : : WrongFileFormatException ( ) < < msg . str ( ) ;
}
@ -70,7 +71,7 @@ private:
struct prismGrammar : qi : : grammar < Iterator , storm : : ir : : Program ( ) , qi : : locals < std : : map < std : : string , std : : shared_ptr < storm : : ir : : expressions : : BooleanConstantExpression > > , std : : map < std : : string , std : : shared_ptr < storm : : ir : : expressions : : IntegerConstantExpression > > , std : : map < std : : string , std : : shared_ptr < storm : : ir : : expressions : : DoubleConstantExpression > > , std : : map < std : : string , storm : : ir : : RewardModel > > , Skipper > {
prismGrammar ( ) : prismGrammar : : base_type ( start ) {
freeIdentifierName % = qi : : lexeme [ ( qi : : alpha > > * ( qi : : alnum ) ) - allVariables_ - allConstants_ ] ;
freeIdentifierName % = qi : : lexeme [ qi : : alpha > > * ( qi : : alnum | qi : : char_ ( ' _ ' ) ) ] - allVariables_ - allConstants_ ;
booleanLiteralExpression = qi : : bool_ [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BooleanLiteral > ( qi : : _1 ) ) ] ;
integerLiteralExpression = qi : : int_ [ qi : : _val = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : IntegerLiteral > ( qi : : _1 ) ) ] ;
@ -122,8 +123,8 @@ private:
expression % = ( booleanExpression | integerExpression | constantDoubleExpression ) ;
stateRewardDefinition = ( booleanExpression > qi : : lit ( " : " ) > constantDoubleExpression > > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : construct < storm : : ir : : StateReward > ( qi : : _1 , qi : : _2 ) ] ;
transitionRewardDefinition = ( qi : : lit ( " [ " ) > commandName > qi : : lit ( " ] " ) > booleanExpression > qi : : lit ( " : " ) > constantDoubleExpression > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : construct < storm : : ir : : TransitionReward > ( qi : : _1 , qi : : _2 , qi : : _3 ) ] ;
rewardDefinition = ( qi : : lit ( " rewards " ) > qi : : lit ( " \" " ) > freeIdentifierName > qi : : lit ( " \" " ) > + ( stateRewardDefinition [ phoenix : : push_back ( qi : : _a , qi : : _1 ) ] | transitionRewardDefinition [ phoenix : : push_back ( qi : : _b , qi : : _1 ) ] ) > qi : : lit ( " endrewards " ) ) [ qi : : _r1 [ qi : : _1 ] = phoenix : : construct < storm : : ir : : RewardModel > ( qi : : _1 , qi : : _a , qi : : _b ) ] ;
transitionRewardDefinition = ( qi : : lit ( " [ " ) > - ( commandName [ qi : : _a = qi : : _1 ] ) > qi : : lit ( " ] " ) > booleanExpression > qi : : lit ( " : " ) > constantDoubleExpression > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : construct < storm : : ir : : TransitionReward > ( qi : : _a , qi : : _2 , qi : : _3 ) ] ;
rewardDefinition = ( qi : : lit ( " rewards " ) > qi : : lit ( " \" " ) > freeIdentifierName > qi : : lit ( " \" " ) > + ( stateRewardDefinition [ phoenix : : push_back ( qi : : _a , qi : : _1 ) ] | transitionRewardDefinition [ phoenix : : push_back ( qi : : _b , qi : : _1 ) ] ) > qi : : lit ( " endrewards " ) ) [ phoenix : : insert ( qi : : _r1 , phoenix : : construct < std : : pair < std : : string , storm : : ir : : RewardModel > > ( qi : : _1 , phoenix : : construct < storm : : ir : : RewardModel > ( qi : : _1 , qi : : _a , qi : : _b ) ) ) ] ;
rewardDefinitionList = * rewardDefinition ( qi : : _r1 ) ;
/ / This block defines auxiliary entities that are used to check whether a certain variable exist .
@ -151,9 +152,9 @@ private:
definedBooleanConstantDefinition = ( qi : : lit ( " const " ) > > qi : : lit ( " bool " ) > > freeIdentifierName > > qi : : lit ( " = " ) > booleanLiteralExpression > qi : : lit ( " ; " ) ) [ phoenix : : bind ( booleanConstants_ . add , qi : : _1 , qi : : _2 ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _2 ) , qi : : _val = qi : : _2 ] ;
definedIntegerConstantDefinition = ( qi : : lit ( " const " ) > > qi : : lit ( " int " ) > > freeIdentifierName > > qi : : lit ( " = " ) > integerLiteralExpression > qi : : lit ( " ; " ) ) [ phoenix : : bind ( integerConstants_ . add , qi : : _1 , qi : : _2 ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _2 ) , qi : : _val = qi : : _2 ] ;
definedDoubleConstantDefinition = ( qi : : lit ( " const " ) > > qi : : lit ( " double " ) > > freeIdentifierName > > qi : : lit ( " = " ) > doubleLiteralExpression > qi : : lit ( " ; " ) ) [ phoenix : : bind ( doubleConstants_ . add , qi : : _1 , qi : : _2 ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _2 ) , qi : : _val = qi : : _2 ] ;
undefinedBooleanConstantDefinition = ( qi : : lit ( " const " ) > qi : : lit ( " bool " ) > freeIdentifierName > qi : : lit ( " ; " ) ) [ qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BooleanConstantExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BooleanConstantExpression > ( qi : : _1 ) ) , qi : : _r1 [ qi : : _1 ] = qi : : _a , phoenix : : bind ( booleanConstantInfo_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( booleanConstants_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _a ) ] ;
undefinedIntegerConstantDefinition = ( qi : : lit ( " const " ) > qi : : lit ( " int " ) > freeIdentifierName > qi : : lit ( " ; " ) ) [ qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : IntegerConstantExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : IntegerConstantExpression > ( qi : : _1 ) ) , qi : : _r1 [ qi : : _1 ] = qi : : _a , phoenix : : bind ( integerConstantInfo_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( integerConstants_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _a ) ] ;
undefinedDoubleConstantDefinition = ( qi : : lit ( " const " ) > qi : : lit ( " double " ) > freeIdentifierName > qi : : lit ( " ; " ) ) [ qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : DoubleConstantExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : DoubleConstantExpression > ( qi : : _1 ) ) , qi : : _r1 [ qi : : _1 ] = qi : : _a , phoenix : : bind ( doubleConstantInfo_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( doubleConstants_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _a ) ] ;
undefinedBooleanConstantDefinition = ( qi : : lit ( " const " ) > > qi : : lit ( " bool " ) > freeIdentifierName > qi : : lit ( " ; " ) ) [ qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : BooleanConstantExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : BooleanConstantExpression > ( qi : : _1 ) ) , phoenix : : insert ( qi : : _r1 , phoenix : : construct < std : : pair < std : : string , std : : shared_ptr < storm : : ir : : expressions : : BooleanConstantExpression > > > ( qi : : _1 , qi : : _a ) ) , phoenix : : bind ( booleanConstantInfo_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( booleanConstants_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _a ) ] ;
undefinedIntegerConstantDefinition = ( qi : : lit ( " const " ) > > qi : : lit ( " int " ) > freeIdentifierName > qi : : lit ( " ; " ) ) [ qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : IntegerConstantExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : IntegerConstantExpression > ( qi : : _1 ) ) , phoenix : : insert ( qi : : _r1 , phoenix : : construct < std : : pair < std : : string , std : : shared_ptr < storm : : ir : : expressions : : IntegerConstantExpression > > > ( qi : : _1 , qi : : _a ) ) , phoenix : : bind ( integerConstantInfo_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( integerConstants_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _a ) ] ;
undefinedDoubleConstantDefinition = ( qi : : lit ( " const " ) > > qi : : lit ( " double " ) > freeIdentifierName > qi : : lit ( " ; " ) ) [ qi : : _a = phoenix : : construct < std : : shared_ptr < storm : : ir : : expressions : : DoubleConstantExpression > > ( phoenix : : new_ < storm : : ir : : expressions : : DoubleConstantExpression > ( qi : : _1 ) ) , phoenix : : insert ( qi : : _r1 , phoenix : : construct < std : : pair < std : : string , std : : shared_ptr < storm : : ir : : expressions : : DoubleConstantExpression > > > ( qi : : _1 , qi : : _a ) ) , phoenix : : bind ( doubleConstantInfo_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( doubleConstants_ . add , qi : : _1 , qi : : _a ) , phoenix : : bind ( allConstants_ . add , qi : : _1 , qi : : _a ) ] ;
definedConstantDefinition % = ( definedBooleanConstantDefinition | definedIntegerConstantDefinition | definedDoubleConstantDefinition ) ;
undefinedConstantDefinition = ( undefinedBooleanConstantDefinition ( qi : : _r1 ) | undefinedIntegerConstantDefinition ( qi : : _r2 ) | undefinedDoubleConstantDefinition ( qi : : _r3 ) ) ;
constantDefinitionList = * ( definedConstantDefinition | undefinedConstantDefinition ( qi : : _r1 , qi : : _r2 , qi : : _r3 ) ) ;
@ -189,7 +190,7 @@ private:
qi : : rule < Iterator , qi : : unused_type ( std : : map < std : : string , storm : : ir : : RewardModel > & ) , Skipper > rewardDefinitionList ;
qi : : rule < Iterator , qi : : unused_type ( std : : map < std : : string , storm : : ir : : RewardModel > & ) , qi : : locals < std : : vector < storm : : ir : : StateReward > , std : : vector < storm : : ir : : TransitionReward > > , Skipper > rewardDefinition ;
qi : : rule < Iterator , storm : : ir : : StateReward ( ) , Skipper > stateRewardDefinition ;
qi : : rule < Iterator , storm : : ir : : TransitionReward ( ) , Skipper > transitionRewardDefinition ;
qi : : rule < Iterator , storm : : ir : : TransitionReward ( ) , qi : : locals < std : : string > , Skipper > transitionRewardDefinition ;
qi : : rule < Iterator , std : : shared_ptr < storm : : ir : : expressions : : BaseExpression > ( ) , Skipper > constantDefinition ;
qi : : rule < Iterator , qi : : unused_type ( std : : map < std : : string , std : : shared_ptr < storm : : ir : : expressions : : BooleanConstantExpression > > & , std : : map < std : : string , std : : shared_ptr < storm : : ir : : expressions : : IntegerConstantExpression > > & , std : : map < std : : string , std : : shared_ptr < storm : : ir : : expressions : : DoubleConstantExpression > > & ) , Skipper > undefinedConstantDefinition ;
xxxxxxxxxx