114 struct modelTypeStruct : qi::symbols<char, storm::prism::Program::ModelType> {
122 struct keywordsStruct : qi::symbols<char, uint_fast64_t> {
124 add(
"dtmc", 1)(
"ctmc", 2)(
"mdp", 3)(
"ctmdp", 4)(
"ma", 5)(
"pomdp", 6)(
"pta", 7)(
"smg", 8)(
"const", 9)(
"int", 10)(
"bool", 11)(
"module", 12)(
125 "endmodule", 13)(
"rewards", 14)(
"endrewards", 15)(
"true", 16)(
"false", 17)(
"min", 18)(
"max", 19)(
"floor", 20)(
"ceil", 21)(
"init", 22)(
126 "atLeastOneOf", 23)(
"atMostOneOf", 24)(
"exactlyOneOf", 25)(
"endinit", 26)(
"invariant", 27)(
"endinvariant", 28)(
"player", 29)(
"endplayer", 30);
131 class PositionAnnotation {
133 typedef void result_type;
135 PositionAnnotation(
Iterator first) : first(first) {
139 template<
typename Entity,
typename First,
typename Last>
140 result_type operator()(Entity& entity, First f, Last)
const {
141 entity.setLineNumber(get_line(f));
145 std::string filename;
160 void moveToSecondRun();
165 void createFormulaIdentifiers(std::vector<storm::prism::Formula>
const& formulas);
170 bool prismCompatibility;
177 void allowDoubleLiterals(
bool flag);
180 std::string filename;
187 std::string
const& getFilename()
const;
189 mutable std::set<std::string> observables;
192 std::vector<std::string> formulaExpressions;
195 std::vector<uint64_t> formulaOrder;
198 phoenix::function<PositionAnnotation> annotate;
228 qi::rule<
Iterator, std::string(), Skipper> knownModuleName;
229 qi::rule<
Iterator, std::string(), Skipper> freshModuleName;
231 qi::locals<std::vector<storm::prism::BooleanVariable>, std::vector<storm::prism::IntegerVariable>, std::vector<storm::prism::ClockVariable>>,
234 qi::rule<Iterator, storm::prism::ModuleRenaming, qi::locals<std::map<std::string, std::string>>, Skipper> moduleRenaming;
239 qi::unused_type(std::vector<storm::prism::BooleanVariable>&, std::vector<storm::prism::IntegerVariable>&,
240 std::vector<storm::prism::ClockVariable>&),
253 qi::rule<Iterator, typename storm::prism::Update::ExpressionPair, Skipper> likelihoodDefinition;
254 qi::rule<Iterator, std::vector<storm::prism::Assignment>(), Skipper> assignmentDefinitionList;
256 qi::rule<
Iterator, std::string(), Skipper> knownActionName;
259 qi::rule<
Iterator, std::string(), Skipper> freshRewardModelName;
261 qi::locals<std::string, std::vector<storm::prism::StateReward>, std::vector<storm::prism::StateActionReward>,
262 std::vector<storm::prism::TransitionReward>>,
264 rewardModelDefinition;
268 qi::locals<std::string, storm::expressions::Expression, storm::expressions::Expression, storm::expressions::Expression>, Skipper>
269 transitionRewardDefinition;
272 qi::rule<
Iterator, std::string(), Skipper> freshPlayerName;
273 qi::rule<
Iterator, std::string(), qi::locals<std::string>, Skipper> playerControlledActionName;
274 qi::rule<
Iterator, std::string(), qi::locals<std::string>, Skipper> playerControlledModuleName;
282 qi::rule<
Iterator, qi::unused_type(), Skipper> observablesConstruct;
289 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> parallelComposition;
290 qi::rule<
Iterator, qi::unused_type(), Skipper> synchronizingParallelComposition;
291 qi::rule<
Iterator, qi::unused_type(), Skipper> interleavingParallelComposition;
292 qi::rule<Iterator, std::set<std::string>(), Skipper> restrictedParallelComposition;
293 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> hidingOrRenamingComposition;
294 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> hidingComposition;
295 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> renamingComposition;
296 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> atomicComposition;
297 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> moduleComposition;
298 qi::rule<Iterator, std::set<std::string>(), Skipper> actionNameList;
299 qi::rule<Iterator, std::map<std::string, std::string>(), Skipper> actionRenamingList;
303 qi::rule<
Iterator, std::string(), Skipper> freshLabelName;
307 qi::rule<
Iterator, std::string(), Skipper> freshObservationLabelName;
310 qi::rule<
Iterator, std::string(), Skipper> formulaDefinitionRhs;
314 qi::rule<
Iterator, std::string(), Skipper> identifier;
315 qi::rule<
Iterator, std::string(), Skipper> freshIdentifier;
318 storm::parser::PrismParserGrammar::keywordsStruct keywords_;
319 storm::parser::PrismParserGrammar::modelTypeStruct modelType_;
320 qi::symbols<char, storm::expressions::Expression> identifiers_;
323 std::shared_ptr<storm::expressions::ExpressionManager> manager;
324 std::shared_ptr<storm::parser::ExpressionParser> expressionParser;
327 bool isValidIdentifier(std::string
const& identifier);
328 bool isFreshIdentifier(std::string
const& identifier);
329 bool isKnownModuleName(std::string
const& moduleName,
bool inSecondRun);
330 bool isFreshModuleName(std::string
const& moduleName);
331 bool isKnownActionName(std::string
const& actionName,
bool inSecondRun);
332 bool isFreshLabelName(std::string
const& moduleName);
333 bool isFreshObservationLabelName(std::string
const& labelName);
334 bool isFreshRewardModelName(std::string
const& moduleName);
335 bool isFreshPlayerName(std::string
const& playerName);
342 bool addSystemCompositionConstruct(std::shared_ptr<storm::prism::Composition>
const& composition,
GlobalProgramInformation& globalProgramInformation);
345 std::shared_ptr<storm::prism::Composition> createModuleComposition(std::string
const& moduleName)
const;
346 std::shared_ptr<storm::prism::Composition> createRenamingComposition(std::shared_ptr<storm::prism::Composition>
const& subcomposition,
347 std::map<std::string, std::string>
const& renaming)
const;
348 std::shared_ptr<storm::prism::Composition> createHidingComposition(std::shared_ptr<storm::prism::Composition>
const& subcomposition,
349 std::set<std::string>
const& actionsToHide)
const;
350 std::shared_ptr<storm::prism::Composition> createSynchronizingParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
351 std::shared_ptr<storm::prism::Composition>
const& right)
const;
352 std::shared_ptr<storm::prism::Composition> createInterleavingParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
353 std::shared_ptr<storm::prism::Composition>
const& right)
const;
354 std::shared_ptr<storm::prism::Composition> createRestrictedParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
355 std::set<std::string>
const& synchronizingActions,
356 std::shared_ptr<storm::prism::Composition>
const& right)
const;
364 storm::prism::Formula createFormulaFirstRun(std::string
const& formulaName, std::string
const& expression);
368 storm::prism::RewardModel createRewardModel(std::string
const& rewardModelName, std::vector<storm::prism::StateReward>
const& stateRewards,
369 std::vector<storm::prism::StateActionReward>
const& stateActionRewards,
370 std::vector<storm::prism::TransitionReward>
const& transitionRewards)
const;
384 std::vector<storm::prism::Assignment>
const& assignments,
GlobalProgramInformation& globalProgramInformation)
const;
394 storm::prism::Module createModule(std::string
const& moduleName, std::vector<storm::prism::BooleanVariable>
const& booleanVariables,
395 std::vector<storm::prism::IntegerVariable>
const& integerVariables,
396 std::vector<storm::prism::ClockVariable>
const& clockVariables,
397 boost::optional<storm::expressions::Expression>
const& invariant, std::vector<storm::prism::Command>
const& commands,
402 storm::prism::Player createPlayer(std::string
const& playerName, std::vector<std::string>
const& moduleNames, std::vector<std::string>
const& commandNames);
404 void createObservablesList(std::vector<std::string>
const& observables);
409 phoenix::function<SpiritErrorHandler> handler;