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, std::vector<storm::prism::Assignment>(), Skipper> assignmentDefinitionList;
255 qi::rule<
Iterator, std::string(), Skipper> knownActionName;
258 qi::rule<
Iterator, std::string(), Skipper> freshRewardModelName;
260 qi::locals<std::string, std::vector<storm::prism::StateReward>, std::vector<storm::prism::StateActionReward>,
261 std::vector<storm::prism::TransitionReward>>,
263 rewardModelDefinition;
267 qi::locals<std::string, storm::expressions::Expression, storm::expressions::Expression, storm::expressions::Expression>, Skipper>
268 transitionRewardDefinition;
271 qi::rule<
Iterator, std::string(), Skipper> freshPlayerName;
272 qi::rule<
Iterator, std::string(), qi::locals<std::string>, Skipper> playerControlledActionName;
273 qi::rule<
Iterator, std::string(), qi::locals<std::string>, Skipper> playerControlledModuleName;
281 qi::rule<
Iterator, qi::unused_type(), Skipper> observablesConstruct;
288 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> parallelComposition;
289 qi::rule<
Iterator, qi::unused_type(), Skipper> synchronizingParallelComposition;
290 qi::rule<
Iterator, qi::unused_type(), Skipper> interleavingParallelComposition;
291 qi::rule<Iterator, std::set<std::string>(), Skipper> restrictedParallelComposition;
292 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> hidingOrRenamingComposition;
293 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> hidingComposition;
294 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> renamingComposition;
295 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> atomicComposition;
296 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> moduleComposition;
297 qi::rule<Iterator, std::set<std::string>(), Skipper> actionNameList;
298 qi::rule<Iterator, std::map<std::string, std::string>(), Skipper> actionRenamingList;
302 qi::rule<
Iterator, std::string(), Skipper> freshLabelName;
306 qi::rule<
Iterator, std::string(), Skipper> freshObservationLabelName;
309 qi::rule<
Iterator, std::string(), Skipper> formulaDefinitionRhs;
313 qi::rule<
Iterator, std::string(), Skipper> identifier;
314 qi::rule<
Iterator, std::string(), Skipper> freshIdentifier;
317 storm::parser::PrismParserGrammar::keywordsStruct keywords_;
318 storm::parser::PrismParserGrammar::modelTypeStruct modelType_;
319 qi::symbols<char, storm::expressions::Expression> identifiers_;
322 std::shared_ptr<storm::expressions::ExpressionManager> manager;
323 std::shared_ptr<storm::parser::ExpressionParser> expressionParser;
326 bool isValidIdentifier(std::string
const& identifier);
327 bool isFreshIdentifier(std::string
const& identifier);
328 bool isKnownModuleName(std::string
const& moduleName,
bool inSecondRun);
329 bool isFreshModuleName(std::string
const& moduleName);
330 bool isKnownActionName(std::string
const& actionName,
bool inSecondRun);
331 bool isFreshLabelName(std::string
const& moduleName);
332 bool isFreshObservationLabelName(std::string
const& labelName);
333 bool isFreshRewardModelName(std::string
const& moduleName);
334 bool isFreshPlayerName(std::string
const& playerName);
341 bool addSystemCompositionConstruct(std::shared_ptr<storm::prism::Composition>
const& composition,
GlobalProgramInformation& globalProgramInformation);
344 std::shared_ptr<storm::prism::Composition> createModuleComposition(std::string
const& moduleName)
const;
345 std::shared_ptr<storm::prism::Composition> createRenamingComposition(std::shared_ptr<storm::prism::Composition>
const& subcomposition,
346 std::map<std::string, std::string>
const& renaming)
const;
347 std::shared_ptr<storm::prism::Composition> createHidingComposition(std::shared_ptr<storm::prism::Composition>
const& subcomposition,
348 std::set<std::string>
const& actionsToHide)
const;
349 std::shared_ptr<storm::prism::Composition> createSynchronizingParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
350 std::shared_ptr<storm::prism::Composition>
const& right)
const;
351 std::shared_ptr<storm::prism::Composition> createInterleavingParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
352 std::shared_ptr<storm::prism::Composition>
const& right)
const;
353 std::shared_ptr<storm::prism::Composition> createRestrictedParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
354 std::set<std::string>
const& synchronizingActions,
355 std::shared_ptr<storm::prism::Composition>
const& right)
const;
363 storm::prism::Formula createFormulaFirstRun(std::string
const& formulaName, std::string
const& expression);
367 storm::prism::RewardModel createRewardModel(std::string
const& rewardModelName, std::vector<storm::prism::StateReward>
const& stateRewards,
368 std::vector<storm::prism::StateActionReward>
const& stateActionRewards,
369 std::vector<storm::prism::TransitionReward>
const& transitionRewards)
const;
392 storm::prism::Module createModule(std::string
const& moduleName, std::vector<storm::prism::BooleanVariable>
const& booleanVariables,
393 std::vector<storm::prism::IntegerVariable>
const& integerVariables,
394 std::vector<storm::prism::ClockVariable>
const& clockVariables,
395 boost::optional<storm::expressions::Expression>
const& invariant, std::vector<storm::prism::Command>
const& commands,
400 storm::prism::Player createPlayer(std::string
const& playerName, std::vector<std::string>
const& moduleNames, std::vector<std::string>
const& commandNames);
402 void createObservablesList(std::vector<std::string>
const& observables);
407 phoenix::function<SpiritErrorHandler> handler;