97class PrismParserGrammar :
public qi::grammar<Iterator, storm::prism::Program(), Skipper> {
117 struct modelTypeStruct : qi::symbols<char, storm::prism::Program::ModelType> {
125 struct keywordsStruct : qi::symbols<char, uint_fast64_t> {
127 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)(
128 "endmodule", 13)(
"rewards", 14)(
"endrewards", 15)(
"true", 16)(
"false", 17)(
"min", 18)(
"max", 19)(
"floor", 20)(
"ceil", 21)(
"init", 22)(
129 "atLeastOneOf", 23)(
"atMostOneOf", 24)(
"exactlyOneOf", 25)(
"endinit", 26)(
"invariant", 27)(
"endinvariant", 28)(
"player", 29)(
"endplayer", 30);
134 struct expressionKeywordsStruct : qi::symbols<char, uint_fast64_t> {
135 expressionKeywordsStruct() {
136 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)(
137 "endmodule", 13)(
"rewards", 14)(
"endrewards", 15)(
"true", 16)(
"false", 17)(
"min", 18)(
"max", 19)(
"floor", 20)(
"ceil", 21)(
"init", 22)(
138 "atLeastOneOf", 23)(
"atMostOneOf", 24)(
"exactlyOneOf", 25)(
"endinit", 26);
143 class PositionAnnotation {
145 typedef void result_type;
147 PositionAnnotation(
Iterator first) : first(first) {
151 template<
typename Entity,
typename First,
typename Last>
152 result_type operator()(Entity& entity, First f, Last)
const {
153 entity.setLineNumber(get_line(f));
157 std::string filename;
167 PrismParserGrammar(std::string
const& filename,
Iterator first,
bool prismCompatibility);
172 void moveToSecondRun();
177 void createFormulaIdentifiers(std::vector<storm::prism::Formula>
const& formulas);
182 bool prismCompatibility;
189 void allowDoubleLiterals(
bool flag);
192 std::string filename;
199 std::string
const& getFilename()
const;
204 std::string lastRejectedKeywordIdentifier;
207 mutable std::map<std::string, bool> observables;
210 std::vector<std::string> formulaExpressions;
213 std::vector<uint64_t> formulaOrder;
216 phoenix::function<PositionAnnotation> annotate;
246 qi::rule<
Iterator, std::string(), Skipper> knownModuleName;
247 qi::rule<
Iterator, std::string(), Skipper> freshModuleName;
249 qi::locals<std::vector<storm::prism::BooleanVariable>, std::vector<storm::prism::IntegerVariable>, std::vector<storm::prism::ClockVariable>>,
252 qi::rule<Iterator, storm::prism::ModuleRenaming, qi::locals<std::map<std::string, std::string>>, Skipper> moduleRenaming;
257 qi::unused_type(std::vector<storm::prism::BooleanVariable>&, std::vector<storm::prism::IntegerVariable>&,
258 std::vector<storm::prism::ClockVariable>&),
271 qi::rule<Iterator, typename storm::prism::Update::ExpressionPair, Skipper> likelihoodDefinition;
272 qi::rule<Iterator, std::vector<storm::prism::Assignment>(), Skipper> assignmentDefinitionList;
274 qi::rule<
Iterator, std::string(), Skipper> knownActionName;
277 qi::rule<
Iterator, std::string(), Skipper> freshRewardModelName;
279 qi::locals<std::string, std::vector<storm::prism::StateReward>, std::vector<storm::prism::StateActionReward>,
280 std::vector<storm::prism::TransitionReward>>,
282 rewardModelDefinition;
286 qi::locals<std::string, storm::expressions::Expression, storm::expressions::Expression, storm::expressions::Expression>, Skipper>
287 transitionRewardDefinition;
290 qi::rule<
Iterator, std::string(), Skipper> freshPlayerName;
291 qi::rule<
Iterator, std::string(), qi::locals<std::string>, Skipper> playerControlledActionName;
292 qi::rule<
Iterator, std::string(), qi::locals<std::string>, Skipper> playerControlledModuleName;
307 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> parallelComposition;
308 qi::rule<
Iterator, qi::unused_type(), Skipper> synchronizingParallelComposition;
309 qi::rule<
Iterator, qi::unused_type(), Skipper> interleavingParallelComposition;
310 qi::rule<Iterator, std::set<std::string>(), Skipper> restrictedParallelComposition;
311 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> hidingOrRenamingComposition;
312 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> hidingComposition;
313 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> renamingComposition;
314 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> atomicComposition;
315 qi::rule<Iterator, std::shared_ptr<storm::prism::Composition>(), Skipper> moduleComposition;
316 qi::rule<Iterator, std::set<std::string>(), Skipper> actionNameList;
317 qi::rule<Iterator, std::map<std::string, std::string>(), Skipper> actionRenamingList;
321 qi::rule<
Iterator, std::string(), Skipper> freshLabelName;
325 qi::rule<
Iterator, std::string(), Skipper> freshObservationLabelName;
328 qi::rule<
Iterator, std::string(), Skipper> formulaDefinitionRhs;
332 qi::rule<
Iterator, std::string(), Skipper> identifier;
333 qi::rule<
Iterator, std::string(), Skipper> freshIdentifier;
336 storm::parser::PrismParserGrammar::keywordsStruct keywords_;
339 storm::parser::PrismParserGrammar::expressionKeywordsStruct expressionKeywords_;
340 storm::parser::PrismParserGrammar::modelTypeStruct modelType_;
341 qi::symbols<char, storm::expressions::Expression> identifiers_;
344 std::shared_ptr<storm::expressions::ExpressionManager> manager;
345 std::shared_ptr<storm::parser::ExpressionParser> expressionParser;
348 bool isValidIdentifier(std::string
const& identifier);
350 void reportRejectedKeywordIdentifier();
351 bool isFreshIdentifier(std::string
const& identifier);
352 bool isKnownModuleName(std::string
const& moduleName,
bool inSecondRun);
353 bool isFreshModuleName(std::string
const& moduleName);
354 bool isKnownActionName(std::string
const& actionName,
bool inSecondRun);
355 bool isFreshLabelName(std::string
const& moduleName);
356 bool isFreshObservationLabelName(std::string
const& labelName);
357 bool isFreshRewardModelName(std::string
const& moduleName);
358 bool isFreshPlayerName(std::string
const& playerName);
365 bool addSystemCompositionConstruct(std::shared_ptr<storm::prism::Composition>
const& composition,
GlobalProgramInformation& globalProgramInformation);
368 std::shared_ptr<storm::prism::Composition> createModuleComposition(std::string
const& moduleName)
const;
369 std::shared_ptr<storm::prism::Composition> createRenamingComposition(std::shared_ptr<storm::prism::Composition>
const& subcomposition,
370 std::map<std::string, std::string>
const& renaming)
const;
371 std::shared_ptr<storm::prism::Composition> createHidingComposition(std::shared_ptr<storm::prism::Composition>
const& subcomposition,
372 std::set<std::string>
const& actionsToHide)
const;
373 std::shared_ptr<storm::prism::Composition> createSynchronizingParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
374 std::shared_ptr<storm::prism::Composition>
const& right)
const;
375 std::shared_ptr<storm::prism::Composition> createInterleavingParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
376 std::shared_ptr<storm::prism::Composition>
const& right)
const;
377 std::shared_ptr<storm::prism::Composition> createRestrictedParallelComposition(std::shared_ptr<storm::prism::Composition>
const& left,
378 std::set<std::string>
const& synchronizingActions,
379 std::shared_ptr<storm::prism::Composition>
const& right)
const;
387 storm::prism::Formula createFormulaFirstRun(std::string
const& formulaName, std::string
const& expression);
391 storm::prism::RewardModel createRewardModel(std::string
const& rewardModelName, std::vector<storm::prism::StateReward>
const& stateRewards,
392 std::vector<storm::prism::StateActionReward>
const& stateActionRewards,
393 std::vector<storm::prism::TransitionReward>
const& transitionRewards)
const;
407 std::vector<storm::prism::Assignment>
const& assignments,
GlobalProgramInformation& globalProgramInformation)
const;
417 storm::prism::Module createModule(std::string
const& moduleName, std::vector<storm::prism::BooleanVariable>
const& booleanVariables,
418 std::vector<storm::prism::IntegerVariable>
const& integerVariables,
419 std::vector<storm::prism::ClockVariable>
const& clockVariables,
420 boost::optional<storm::expressions::Expression>
const& invariant, std::vector<storm::prism::Command>
const& commands,
425 storm::prism::Player createPlayer(std::string
const& playerName, std::vector<std::string>
const& moduleNames, std::vector<std::string>
const& commandNames);
427 bool addObservablesConstruct(std::vector<std::string>
const& observables,
GlobalProgramInformation& globalProgramInformation);
432 phoenix::function<SpiritErrorHandler> handler;