@ -27,7 +27,10 @@ namespace storm {
unaryExpression = atomicExpression [ qi : : _val = qi : : _1 ] | ( qi : : lit ( " ! " ) > > atomicExpression ) [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createNotExpression , phoenix : : ref ( * this ) , qi : : _1 ) ] | ( qi : : lit ( " - " ) > > atomicExpression ) [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createMinusExpression , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
unaryExpression . name ( " unary expression " ) ;
multiplicationExpression = unaryExpression [ qi : : _val = qi : : _1 ] > > * ( ( qi : : lit ( " * " ) [ qi : : _a = true ] | qi : : lit ( " / " ) [ qi : : _a = false ] ) > > unaryExpression [ phoenix : : if_ ( qi : : _a ) [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createMultExpression , phoenix : : ref ( * this ) , qi : : _val , qi : : _1 ) ] . else_ [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createDivExpression , phoenix : : ref ( * this ) , qi : : _val , qi : : _1 ) ] ] ) ;
powerExpression = unaryExpression [ qi : : _val = qi : : _1 ] > > - ( qi : : lit ( " ^ " ) > expression ) [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createPowerExpression , phoenix : : ref ( * this ) , qi : : _val , qi : : _1 ) ] ;
powerExpression . name ( " power expression " ) ;
multiplicationExpression = powerExpression [ qi : : _val = qi : : _1 ] > > * ( ( qi : : lit ( " * " ) [ qi : : _a = true ] | qi : : lit ( " / " ) [ qi : : _a = false ] ) > > powerExpression [ phoenix : : if_ ( qi : : _a ) [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createMultExpression , phoenix : : ref ( * this ) , qi : : _val , qi : : _1 ) ] . else_ [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createDivExpression , phoenix : : ref ( * this ) , qi : : _val , qi : : _1 ) ] ] ) ;
multiplicationExpression . name ( " multiplication expression " ) ;
plusExpression = multiplicationExpression [ qi : : _val = qi : : _1 ] > > * ( ( qi : : lit ( " + " ) [ qi : : _a = true ] | qi : : lit ( " - " ) [ qi : : _a = false ] ) > > multiplicationExpression ) [ phoenix : : if_ ( qi : : _a ) [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createPlusExpression , phoenix : : ref ( * this ) , qi : : _val , qi : : _1 ) ] . else_ [ qi : : _val = phoenix : : bind ( & ExpressionParser : : createMinusExpression , phoenix : : ref ( * this ) , qi : : _val , qi : : _1 ) ] ] ;
@ -69,12 +72,18 @@ namespace storm {
}
void ExpressionParser : : setIdentifierMapping ( qi : : symbols < char , storm : : expressions : : Expression > const * identifiers_ ) {
this - > createExpressions = true ;
this - > identifiers_ = identifiers_ ;
if ( identifiers_ ! = nullptr ) {
this - > createExpressions = true ;
this - > identifiers_ = identifiers_ ;
} else {
this - > createExpressions = false ;
this - > identifiers_ = nullptr ;
}
}
void ExpressionParser : : unsetIdentifierMapping ( ) {
this - > createExpressions = false ;
this - > identifiers_ = nullptr ;
}
void ExpressionParser : : setAcceptDoubleLiterals ( bool flag ) {
@ -86,7 +95,7 @@ namespace storm {
try {
return e1 . ite ( e2 , e3 ) ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -98,7 +107,7 @@ namespace storm {
try {
return e1 . implies ( e2 ) ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -110,7 +119,7 @@ namespace storm {
try {
return e1 | | e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -122,7 +131,7 @@ namespace storm {
try {
return e1 & & e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -134,7 +143,7 @@ namespace storm {
try {
return e1 > e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -146,7 +155,7 @@ namespace storm {
try {
return e1 > = e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -158,7 +167,7 @@ namespace storm {
try {
return e1 < e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -170,7 +179,7 @@ namespace storm {
try {
return e1 < = e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -186,7 +195,7 @@ namespace storm {
return e1 = = e2 ;
}
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -196,13 +205,9 @@ namespace storm {
storm : : expressions : : Expression ExpressionParser : : createNotEqualsExpression ( storm : : expressions : : Expression e1 , storm : : expressions : : Expression e2 ) const {
if ( this - > createExpressions ) {
try {
if ( e1 . hasBooleanReturnType ( ) & & e2 . hasBooleanReturnType ( ) ) {
return e1 ^ e2 ;
} else {
return e1 ! = e2 ;
}
return e1 ! = e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -214,7 +219,7 @@ namespace storm {
try {
return e1 + e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -226,7 +231,7 @@ namespace storm {
try {
return e1 - e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -238,7 +243,19 @@ namespace storm {
try {
return e1 * e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
}
}
storm : : expressions : : Expression ExpressionParser : : createPowerExpression ( storm : : expressions : : Expression e1 , storm : : expressions : : Expression e2 ) const {
if ( this - > createExpressions ) {
try {
return e1 ^ e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -250,7 +267,7 @@ namespace storm {
try {
return e1 / e2 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -262,7 +279,7 @@ namespace storm {
try {
return ! e1 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -274,7 +291,7 @@ namespace storm {
try {
return - e1 ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -308,9 +325,9 @@ namespace storm {
storm : : expressions : : Expression ExpressionParser : : createIntegerLiteralExpression ( int value ) const {
if ( this - > createExpressions ) {
return storm : : expressions : : Expression : : createFalse ( ) ;
} else {
return storm : : expressions : : Expression : : createIntegerLiteral ( static_cast < int_fast64_t > ( value ) ) ;
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
}
}
@ -319,7 +336,7 @@ namespace storm {
try {
return storm : : expressions : : Expression : : minimum ( e1 , e2 ) ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -331,7 +348,7 @@ namespace storm {
try {
return storm : : expressions : : Expression : : maximum ( e1 , e2 ) ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -343,7 +360,7 @@ namespace storm {
try {
return e1 . floor ( ) ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -355,7 +372,7 @@ namespace storm {
try {
return e1 . ceil ( ) ;
} catch ( storm : : exceptions : : InvalidTypeException const & e ) {
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) < < " . " ) ;
LOG_THROW ( false , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : " < < e . what ( ) ) ;
}
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
@ -364,11 +381,12 @@ namespace storm {
storm : : expressions : : Expression ExpressionParser : : getIdentifierExpression ( std : : string const & identifier ) const {
if ( this - > createExpressions ) {
return storm : : expressions : : Expression : : createFalse ( ) ;
} else {
LOG_THROW ( this - > identifiers_ ! = nullptr , storm : : exceptions : : WrongFormatException , " Unable to substitute identifier expressions without given mapping. " ) ;
storm : : expressions : : Expression const * expression = this - > identifiers_ - > find ( identifier ) ;
LOG_THROW ( expression ! = nullptr , storm : : exceptions : : WrongFormatException , " Parsing error in line " < < get_line ( qi : : _3 ) < < " : Undeclared identifier ' " < < identifier < < " '. " ) ;
return * expression ;
} else {
return storm : : expressions : : Expression : : createFalse ( ) ;
}
}