@ -87,13 +87,13 @@ namespace storm {
undefinedBooleanConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " bool " ) ) > identifier > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createUndefinedBooleanConstant , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
undefinedBooleanConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " bool " ) ) > identifier > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createUndefinedBooleanConstant , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
undefinedBooleanConstantDefinition . name ( " undefined boolean constant declaration " ) ;
undefinedBooleanConstantDefinition . name ( " undefined boolean constant declaration " ) ;
undefinedIntegerConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " int " ) ) > identifier > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createUndefinedIntegerConstant , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
undefinedIntegerConstantDefinition = ( ( qi : : lit ( " const " ) > > - qi : : lit ( " int " ) ) > > identifier > > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createUndefinedIntegerConstant , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
undefinedIntegerConstantDefinition . name ( " undefined integer constant declaration " ) ;
undefinedIntegerConstantDefinition . name ( " undefined integer constant declaration " ) ;
undefinedDoubleConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " double " ) ) > identifier > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createUndefinedDoubleConstant , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
undefinedDoubleConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " double " ) ) > identifier > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createUndefinedDoubleConstant , phoenix : : ref ( * this ) , qi : : _1 ) ] ;
undefinedDoubleConstantDefinition . name ( " undefined double constant definition " ) ;
undefinedDoubleConstantDefinition . name ( " undefined double constant definition " ) ;
undefinedConstantDefinition = ( undefinedBooleanConstantDefinition | undefinedIntegerConstantDefinition | undefinedDouble ConstantDefinition ) ;
undefinedConstantDefinition = ( undefinedBooleanConstantDefinition | undefinedDoubleConstantDefinition | undefinedInteger ConstantDefinition ) ;
undefinedConstantDefinition . name ( " undefined constant definition " ) ;
undefinedConstantDefinition . name ( " undefined constant definition " ) ;
definedBooleanConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " bool " ) > > identifier > > qi : : lit ( " = " ) ) > expression_ > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createDefinedBooleanConstant , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
definedBooleanConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " bool " ) > > identifier > > qi : : lit ( " = " ) ) > expression_ > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createDefinedBooleanConstant , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
@ -105,7 +105,7 @@ namespace storm {
definedDoubleConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " double " ) > > identifier > > qi : : lit ( " = " ) ) > expression_ > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createDefinedDoubleConstant , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
definedDoubleConstantDefinition = ( ( qi : : lit ( " const " ) > > qi : : lit ( " double " ) > > identifier > > qi : : lit ( " = " ) ) > expression_ > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createDefinedDoubleConstant , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
definedDoubleConstantDefinition . name ( " defined double constant declaration " ) ;
definedDoubleConstantDefinition . name ( " defined double constant declaration " ) ;
definedConstantDefinition % = ( definedBooleanConstantDefinition | definedIntegerConstantDefinition | definedDouble ConstantDefinition ) ;
definedConstantDefinition % = ( definedBooleanConstantDefinition | definedDoubleConstantDefinition | definedInteger ConstantDefinition ) ;
definedConstantDefinition . name ( " defined constant definition " ) ;
definedConstantDefinition . name ( " defined constant definition " ) ;
formulaDefinition = ( qi : : lit ( " formula " ) > identifier > qi : : lit ( " = " ) > expression_ > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createFormula , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
formulaDefinition = ( qi : : lit ( " formula " ) > identifier > qi : : lit ( " = " ) > expression_ > qi : : lit ( " ; " ) ) [ qi : : _val = phoenix : : bind ( & PrismParser : : createFormula , phoenix : : ref ( * this ) , qi : : _1 , qi : : _2 ) ] ;
@ -217,8 +217,8 @@ namespace storm {
moduleDefinitionList . name ( " module list " ) ;
moduleDefinitionList . name ( " module list " ) ;
start = ( qi : : eps [ phoenix : : bind ( & PrismParser : : removeInitialConstruct , phoenix : : ref ( * this ) , qi : : _a ) ]
start = ( qi : : eps [ phoenix : : bind ( & PrismParser : : removeInitialConstruct , phoenix : : ref ( * this ) , qi : : _a ) ]
> modelTypeDefinition [ phoenix : : bind ( & GlobalProgramInformation : : modelType , qi : : _a ) = qi : : _1 ]
> * ( definedConstantDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : constants , qi : : _a ) , qi : : _1 ) ]
> * ( modelTypeDefinition [ phoenix : : bind ( & PrismParser : : setModelType , phoenix : : ref ( * this ) , qi : : _a , qi : : _1 ) ]
| definedConstantDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : constants , qi : : _a ) , qi : : _1 ) ]
| undefinedConstantDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : constants , qi : : _a ) , qi : : _1 ) ]
| undefinedConstantDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : constants , qi : : _a ) , qi : : _1 ) ]
| formulaDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : formulas , qi : : _a ) , qi : : _1 ) ]
| formulaDefinition [ phoenix : : push_back ( phoenix : : bind ( & GlobalProgramInformation : : formulas , qi : : _a ) , qi : : _1 ) ]
| globalVariableDefinition ( qi : : _a )
| globalVariableDefinition ( qi : : _a )
@ -299,6 +299,11 @@ namespace storm {
return true ;
return true ;
}
}
void PrismParser : : setModelType ( GlobalProgramInformation & globalProgramInformation , storm : : prism : : Program : : ModelType const & modelType ) {
STORM_LOG_THROW ( globalProgramInformation . modelType = = storm : : prism : : Program : : ModelType : : UNDEFINED , storm : : exceptions : : WrongFormatException , " Parsing error in " < < this - > getFilename ( ) < < " , line " < < get_line ( qi : : _3 ) < < " : Program must not set model type multiple times. " ) ;
globalProgramInformation . modelType = modelType ;
}
std : : shared_ptr < storm : : prism : : Composition > PrismParser : : createModuleComposition ( std : : string const & moduleName ) const {
std : : shared_ptr < storm : : prism : : Composition > PrismParser : : createModuleComposition ( std : : string const & moduleName ) const {
return std : : make_shared < storm : : prism : : ModuleComposition > ( moduleName ) ;
return std : : make_shared < storm : : prism : : ModuleComposition > ( moduleName ) ;
}
}
@ -648,7 +653,13 @@ namespace storm {
}
}
storm : : prism : : Program PrismParser : : createProgram ( GlobalProgramInformation const & globalProgramInformation ) const {
storm : : prism : : Program PrismParser : : createProgram ( GlobalProgramInformation const & globalProgramInformation ) const {
return storm : : prism : : Program ( manager , globalProgramInformation . modelType , globalProgramInformation . constants , globalProgramInformation . globalBooleanVariables , globalProgramInformation . globalIntegerVariables , globalProgramInformation . formulas , globalProgramInformation . modules , globalProgramInformation . actionIndices , globalProgramInformation . rewardModels , globalProgramInformation . labels , secondRun & & ! globalProgramInformation . hasInitialConstruct ? boost : : none : boost : : make_optional ( globalProgramInformation . initialConstruct ) , globalProgramInformation . systemCompositionConstruct , this - > getFilename ( ) , 1 , this - > secondRun ) ;
storm : : prism : : Program : : ModelType finalModelType = globalProgramInformation . modelType ;
if ( globalProgramInformation . modelType = = storm : : prism : : Program : : ModelType : : UNDEFINED ) {
STORM_LOG_WARN ( " Program does not specify model type. Implicitly assuming 'mdp'. " ) ;
finalModelType = storm : : prism : : Program : : ModelType : : MDP ;
}
return storm : : prism : : Program ( manager , finalModelType , globalProgramInformation . constants , globalProgramInformation . globalBooleanVariables , globalProgramInformation . globalIntegerVariables , globalProgramInformation . formulas , globalProgramInformation . modules , globalProgramInformation . actionIndices , globalProgramInformation . rewardModels , globalProgramInformation . labels , secondRun & & ! globalProgramInformation . hasInitialConstruct ? boost : : none : boost : : make_optional ( globalProgramInformation . initialConstruct ) , globalProgramInformation . systemCompositionConstruct , this - > getFilename ( ) , 1 , this - > secondRun ) ;
}
}
void PrismParser : : removeInitialConstruct ( GlobalProgramInformation & globalProgramInformation ) const {
void PrismParser : : removeInitialConstruct ( GlobalProgramInformation & globalProgramInformation ) const {