Browse Source

Formulas: Added parentheses to formula output to avoid ambiguity

main
Tim Quatmann 4 years ago
committed by Stefan Pranger
parent
commit
10e2d85cc4
  1. 9
      src/storm/logic/AtomicExpressionFormula.cpp
  2. 2
      src/storm/logic/AtomicExpressionFormula.h
  3. 3
      src/storm/logic/AtomicLabelFormula.cpp
  4. 2
      src/storm/logic/AtomicLabelFormula.h
  5. 14
      src/storm/logic/BinaryBooleanPathFormula.cpp
  6. 2
      src/storm/logic/BinaryBooleanPathFormula.h
  7. 14
      src/storm/logic/BinaryBooleanStateFormula.cpp
  8. 2
      src/storm/logic/BinaryBooleanStateFormula.h
  9. 3
      src/storm/logic/BooleanLiteralFormula.cpp
  10. 2
      src/storm/logic/BooleanLiteralFormula.h
  11. 13
      src/storm/logic/BoundedUntilFormula.cpp
  12. 2
      src/storm/logic/BoundedUntilFormula.h
  13. 12
      src/storm/logic/ConditionalFormula.cpp
  14. 2
      src/storm/logic/ConditionalFormula.h
  15. 3
      src/storm/logic/CumulativeRewardFormula.cpp
  16. 2
      src/storm/logic/CumulativeRewardFormula.h
  17. 10
      src/storm/logic/EventuallyFormula.cpp
  18. 2
      src/storm/logic/EventuallyFormula.h
  19. 4
      src/storm/logic/Formula.cpp
  20. 10
      src/storm/logic/Formula.h
  21. 5
      src/storm/logic/GameFormula.cpp
  22. 2
      src/storm/logic/GameFormula.h
  23. 10
      src/storm/logic/GloballyFormula.cpp
  24. 2
      src/storm/logic/GloballyFormula.h
  25. 3
      src/storm/logic/HOAPathFormula.cpp
  26. 2
      src/storm/logic/HOAPathFormula.h
  27. 3
      src/storm/logic/InstantaneousRewardFormula.cpp
  28. 2
      src/storm/logic/InstantaneousRewardFormula.h
  29. 7
      src/storm/logic/LongRunAverageOperatorFormula.cpp
  30. 2
      src/storm/logic/LongRunAverageOperatorFormula.h
  31. 3
      src/storm/logic/LongRunAverageRewardFormula.cpp
  32. 2
      src/storm/logic/LongRunAverageRewardFormula.h
  33. 3
      src/storm/logic/MultiObjectiveFormula.cpp
  34. 2
      src/storm/logic/MultiObjectiveFormula.h
  35. 10
      src/storm/logic/NextFormula.cpp
  36. 2
      src/storm/logic/NextFormula.h
  37. 3
      src/storm/logic/OperatorFormula.cpp
  38. 2
      src/storm/logic/OperatorFormula.h
  39. 5
      src/storm/logic/ProbabilityOperatorFormula.cpp
  40. 2
      src/storm/logic/ProbabilityOperatorFormula.h
  41. 3
      src/storm/logic/QuantileFormula.cpp
  42. 2
      src/storm/logic/QuantileFormula.h
  43. 3
      src/storm/logic/RewardOperatorFormula.cpp
  44. 2
      src/storm/logic/RewardOperatorFormula.h
  45. 3
      src/storm/logic/TimeOperatorFormula.cpp
  46. 2
      src/storm/logic/TimeOperatorFormula.h
  47. 3
      src/storm/logic/TotalRewardFormula.cpp
  48. 2
      src/storm/logic/TotalRewardFormula.h
  49. 13
      src/storm/logic/UnaryBooleanPathFormula.cpp
  50. 2
      src/storm/logic/UnaryBooleanPathFormula.h
  51. 13
      src/storm/logic/UnaryBooleanStateFormula.cpp
  52. 2
      src/storm/logic/UnaryBooleanStateFormula.h
  53. 12
      src/storm/logic/UntilFormula.cpp
  54. 2
      src/storm/logic/UntilFormula.h

9
src/storm/logic/AtomicExpressionFormula.cpp

@ -28,8 +28,15 @@ namespace storm {
expression.gatherVariables(usedVariables); expression.gatherVariables(usedVariables);
} }
std::ostream& AtomicExpressionFormula::writeToStream(std::ostream& out) const { std::ostream& AtomicExpressionFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
bool parentheses = allowParentheses & (this->expression.isLiteral() || this->expression.isVariable());
if (parentheses) {
out << "(";
}
out << expression; out << expression;
if (parentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/AtomicExpressionFormula.h

@ -19,7 +19,7 @@ namespace storm {
storm::expressions::Expression const& getExpression() const; storm::expressions::Expression const& getExpression() const;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const override; virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const override;
virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const override; virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const override;

3
src/storm/logic/AtomicLabelFormula.cpp

@ -25,7 +25,8 @@ namespace storm {
atomicExpressionFormulas.push_back(std::dynamic_pointer_cast<AtomicLabelFormula const>(this->shared_from_this())); atomicExpressionFormulas.push_back(std::dynamic_pointer_cast<AtomicLabelFormula const>(this->shared_from_this()));
} }
std::ostream& AtomicLabelFormula::writeToStream(std::ostream& out) const { std::ostream& AtomicLabelFormula::writeToStream(std::ostream& out, bool /*allowParentheses*/) const {
// No parentheses necessary
out << "\"" << label << "\""; out << "\"" << label << "\"";
return out; return out;
} }

2
src/storm/logic/AtomicLabelFormula.h

@ -23,7 +23,7 @@ namespace storm {
virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override; virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
std::string label; std::string label;

14
src/storm/logic/BinaryBooleanPathFormula.cpp

@ -41,15 +41,19 @@ namespace storm {
return this->getOperator() == OperatorType::Or; return this->getOperator() == OperatorType::Or;
} }
std::ostream& BinaryBooleanPathFormula::writeToStream(std::ostream& out) const { std::ostream& BinaryBooleanPathFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
out << "("; if (allowParentheses) {
this->getLeftSubformula().writeToStream(out); out << "(";
}
this->getLeftSubformula().writeToStream(out, true);
switch (operatorType) { switch (operatorType) {
case OperatorType::And: out << " & "; break; case OperatorType::And: out << " & "; break;
case OperatorType::Or: out << " | "; break; case OperatorType::Or: out << " | "; break;
} }
this->getRightSubformula().writeToStream(out); this->getRightSubformula().writeToStream(out, true);
out << ")"; if (allowParentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/BinaryBooleanPathFormula.h

@ -31,7 +31,7 @@ namespace storm {
virtual bool isAnd() const; virtual bool isAnd() const;
virtual bool isOr() const; virtual bool isOr() const;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
OperatorType operatorType; OperatorType operatorType;

14
src/storm/logic/BinaryBooleanStateFormula.cpp

@ -31,15 +31,19 @@ namespace storm {
return this->getOperator() == OperatorType::Or; return this->getOperator() == OperatorType::Or;
} }
std::ostream& BinaryBooleanStateFormula::writeToStream(std::ostream& out) const { std::ostream& BinaryBooleanStateFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
out << "("; if (allowParentheses) {
this->getLeftSubformula().writeToStream(out); out << "(";
}
this->getLeftSubformula().writeToStream(out, true);
switch (operatorType) { switch (operatorType) {
case OperatorType::And: out << " & "; break; case OperatorType::And: out << " & "; break;
case OperatorType::Or: out << " | "; break; case OperatorType::Or: out << " | "; break;
} }
this->getRightSubformula().writeToStream(out); this->getRightSubformula().writeToStream(out, true);
out << ")"; if (allowParentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/BinaryBooleanStateFormula.h

@ -27,7 +27,7 @@ namespace storm {
virtual bool isAnd() const; virtual bool isAnd() const;
virtual bool isOr() const; virtual bool isOr() const;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
OperatorType operatorType; OperatorType operatorType;

3
src/storm/logic/BooleanLiteralFormula.cpp

@ -24,7 +24,8 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& BooleanLiteralFormula::writeToStream(std::ostream& out) const { std::ostream& BooleanLiteralFormula::writeToStream(std::ostream& out, bool /*allowParentheses */) const {
// No parentheses necessary
if (value) { if (value) {
out << "true"; out << "true";
} else { } else {

2
src/storm/logic/BooleanLiteralFormula.h

@ -19,7 +19,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
bool value; bool value;

13
src/storm/logic/BoundedUntilFormula.cpp

@ -309,7 +309,7 @@ namespace storm {
return std::make_shared<BoundedUntilFormula const>(getLeftSubformula(i).asSharedPointer(), getRightSubformula(i).asSharedPointer(), lowerBound.at(i), upperBound.at(i), getTimeBoundReference(i)); return std::make_shared<BoundedUntilFormula const>(getLeftSubformula(i).asSharedPointer(), getRightSubformula(i).asSharedPointer(), lowerBound.at(i), upperBound.at(i), getTimeBoundReference(i));
} }
std::ostream& BoundedUntilFormula::writeToStream(std::ostream& out) const { std::ostream& BoundedUntilFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
if (hasMultiDimensionalSubformulas()) { if (hasMultiDimensionalSubformulas()) {
out << "multi("; out << "multi(";
restrictToDimension(0)->writeToStream(out); restrictToDimension(0)->writeToStream(out);
@ -319,8 +319,10 @@ namespace storm {
} }
out << ")"; out << ")";
} else { } else {
if (allowParentheses) {
this->getLeftSubformula().writeToStream(out); out << "(";
}
this->getLeftSubformula().writeToStream(out, true);
out << " U"; out << " U";
if (this->isMultiDimensional()) { if (this->isMultiDimensional()) {
@ -379,7 +381,10 @@ namespace storm {
out << "}"; out << "}";
} }
this->getRightSubformula().writeToStream(out); this->getRightSubformula().writeToStream(out, true);
if (allowParentheses) {
out << ")";
}
} }
return out; return out;

2
src/storm/logic/BoundedUntilFormula.h

@ -67,7 +67,7 @@ namespace storm {
std::shared_ptr<BoundedUntilFormula const> restrictToDimension(unsigned i) const; std::shared_ptr<BoundedUntilFormula const> restrictToDimension(unsigned i) const;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
static void checkNoVariablesInBound(storm::expressions::Expression const& bound); static void checkNoVariablesInBound(storm::expressions::Expression const& bound);

12
src/storm/logic/ConditionalFormula.cpp

@ -62,10 +62,16 @@ namespace storm {
return true; return true;
} }
std::ostream& ConditionalFormula::writeToStream(std::ostream& out) const { std::ostream& ConditionalFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
this->getSubformula().writeToStream(out); if (allowParentheses) {
out << "(";
}
this->getSubformula().writeToStream(out, true);
out << " || "; out << " || ";
this->getConditionFormula().writeToStream(out); this->getConditionFormula().writeToStream(out, true);
if (allowParentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/ConditionalFormula.h

@ -23,7 +23,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const override; virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const override;
virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override; virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override;

3
src/storm/logic/CumulativeRewardFormula.cpp

@ -161,7 +161,8 @@ namespace storm {
return std::make_shared<CumulativeRewardFormula const>(bounds.at(i), getTimeBoundReference(i), rewardAccumulation); return std::make_shared<CumulativeRewardFormula const>(bounds.at(i), getTimeBoundReference(i), rewardAccumulation);
} }
std::ostream& CumulativeRewardFormula::writeToStream(std::ostream& out) const { std::ostream& CumulativeRewardFormula::writeToStream(std::ostream& out, bool /*allowParentheses*/ ) const {
// No parentheses necessary
out << "C"; out << "C";
if (hasRewardAccumulation()) { if (hasRewardAccumulation()) {
out << "[" << getRewardAccumulation() << "]"; out << "[" << getRewardAccumulation() << "]";

2
src/storm/logic/CumulativeRewardFormula.h

@ -26,7 +26,7 @@ namespace storm {
virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override; virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override;
virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const override; virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
TimeBoundReference const& getTimeBoundReference() const; TimeBoundReference const& getTimeBoundReference() const;
TimeBoundReference const& getTimeBoundReference(unsigned i) const; TimeBoundReference const& getTimeBoundReference(unsigned i) const;

10
src/storm/logic/EventuallyFormula.cpp

@ -55,12 +55,18 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& EventuallyFormula::writeToStream(std::ostream& out) const { std::ostream& EventuallyFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
if (allowParentheses) {
out << "(";
}
out << "F "; out << "F ";
if (hasRewardAccumulation()) { if (hasRewardAccumulation()) {
out << "[" << getRewardAccumulation() << "]"; out << "[" << getRewardAccumulation() << "]";
} }
this->getSubformula().writeToStream(out); this->getSubformula().writeToStream(out, !this->getSubformula().isUnaryFormula());
if (allowParentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/EventuallyFormula.h

@ -29,7 +29,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
bool hasRewardAccumulation() const; bool hasRewardAccumulation() const;
RewardAccumulation const& getRewardAccumulation() const; RewardAccumulation const& getRewardAccumulation() const;

4
src/storm/logic/Formula.cpp

@ -179,6 +179,10 @@ namespace storm {
bool Formula::isOperatorFormula() const { bool Formula::isOperatorFormula() const {
return false; return false;
} }
bool Formula::isUnaryFormula() const {
return isUnaryPathFormula() || isUnaryStateFormula();
}
bool Formula::hasQualitativeResult() const { bool Formula::hasQualitativeResult() const {
return true; return true;

10
src/storm/logic/Formula.h

@ -94,6 +94,7 @@ namespace storm {
virtual bool isBinaryStateFormula() const; virtual bool isBinaryStateFormula() const;
virtual bool isUnaryPathFormula() const; virtual bool isUnaryPathFormula() const;
virtual bool isUnaryStateFormula() const; virtual bool isUnaryStateFormula() const;
bool isUnaryFormula() const;
// Accessors for the return type of a formula. // Accessors for the return type of a formula.
virtual bool hasQualitativeResult() const; virtual bool hasQualitativeResult() const;
@ -236,7 +237,14 @@ namespace storm {
storm::expressions::Expression toExpression(storm::expressions::ExpressionManager const& manager, std::map<std::string, storm::expressions::Expression> const& labelToExpressionMapping = {}) const; storm::expressions::Expression toExpression(storm::expressions::ExpressionManager const& manager, std::map<std::string, storm::expressions::Expression> const& labelToExpressionMapping = {}) const;
std::string toString() const; std::string toString() const;
virtual std::ostream& writeToStream(std::ostream& out) const = 0; /*!
* Writes the forumla to the given output stream
* @param allowParenthesis if true, the output is *potentially* surrounded by parentheses depending on whether parentheses are needed to avoid ambiguity when this formula appears as a subformula of some larger formula.
* @return
*/
virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const = 0;
std::string toPrefixString() const; std::string toPrefixString() const;
virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const; virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const;

5
src/storm/logic/GameFormula.cpp

@ -32,9 +32,10 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& GameFormula::writeToStream(std::ostream& out) const { std::ostream& GameFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parenthesis necessary
out << "<<" << coalition << ">> "; out << "<<" << coalition << ">> ";
this->getSubformula().writeToStream(out); this->getSubformula().writeToStream(out, true);
return out; return out;
} }
} }

2
src/storm/logic/GameFormula.h

@ -24,7 +24,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
PlayerCoalition coalition; PlayerCoalition coalition;

10
src/storm/logic/GloballyFormula.cpp

@ -20,9 +20,15 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& GloballyFormula::writeToStream(std::ostream& out) const { std::ostream& GloballyFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
if (allowParentheses) {
out << "(";
}
out << "G "; out << "G ";
this->getSubformula().writeToStream(out); this->getSubformula().writeToStream(out, !this->getSubformula().isUnaryFormula());
if (allowParentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/GloballyFormula.h

@ -18,7 +18,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
}; };
} }
} }

3
src/storm/logic/HOAPathFormula.cpp

@ -76,7 +76,8 @@ namespace storm {
} }
std::ostream& HOAPathFormula::writeToStream(std::ostream& out) const { std::ostream& HOAPathFormula::writeToStream(std::ostream& out, bool /* allowParentheses */ ) const {
// No parentheses necessary
out << "HOA: { "; out << "HOA: { ";
out << "\"" << automatonFile << "\""; out << "\"" << automatonFile << "\"";
for (auto& mapping : apToFormulaMap) { for (auto& mapping : apToFormulaMap) {

2
src/storm/logic/HOAPathFormula.h

@ -39,7 +39,7 @@ namespace storm {
virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override; virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override;
virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override; virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
std::shared_ptr<storm::automata::DeterministicAutomaton> readAutomaton() const; std::shared_ptr<storm::automata::DeterministicAutomaton> readAutomaton() const;

3
src/storm/logic/InstantaneousRewardFormula.cpp

@ -68,7 +68,8 @@ namespace storm {
STORM_LOG_THROW(!bound.containsVariables(), storm::exceptions::InvalidOperationException, "Cannot evaluate time-instant '" << bound << "' as it contains undefined constants."); STORM_LOG_THROW(!bound.containsVariables(), storm::exceptions::InvalidOperationException, "Cannot evaluate time-instant '" << bound << "' as it contains undefined constants.");
} }
std::ostream& InstantaneousRewardFormula::writeToStream(std::ostream& out) const { std::ostream& InstantaneousRewardFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary.
out << "I=" << this->getBound(); out << "I=" << this->getBound();
return out; return out;
} }

2
src/storm/logic/InstantaneousRewardFormula.h

@ -22,7 +22,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
TimeBoundType const& getTimeBoundType() const; TimeBoundType const& getTimeBoundType() const;
bool isStepBounded() const; bool isStepBounded() const;

7
src/storm/logic/LongRunAverageOperatorFormula.cpp

@ -18,10 +18,11 @@ namespace storm {
boost::any LongRunAverageOperatorFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const { boost::any LongRunAverageOperatorFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& LongRunAverageOperatorFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
std::ostream& LongRunAverageOperatorFormula::writeToStream(std::ostream& out) const { // No parentheses necessary
out << "LRA"; out << "LRA";
OperatorFormula::writeToStream(out); OperatorFormula::writeToStream(out, false);
return out; return out;
} }
} }

2
src/storm/logic/LongRunAverageOperatorFormula.h

@ -17,7 +17,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
}; };
} }
} }

3
src/storm/logic/LongRunAverageRewardFormula.cpp

@ -32,7 +32,8 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& LongRunAverageRewardFormula::writeToStream(std::ostream& out) const { std::ostream& LongRunAverageRewardFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary
out << "LRA"; out << "LRA";
if (hasRewardAccumulation()) { if (hasRewardAccumulation()) {
out << "[" << getRewardAccumulation() << "]"; out << "[" << getRewardAccumulation() << "]";

2
src/storm/logic/LongRunAverageRewardFormula.h

@ -23,7 +23,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
boost::optional<RewardAccumulation> rewardAccumulation; boost::optional<RewardAccumulation> rewardAccumulation;

3
src/storm/logic/MultiObjectiveFormula.cpp

@ -84,7 +84,8 @@ namespace storm {
} }
} }
std::ostream& MultiObjectiveFormula::writeToStream(std::ostream &out) const { std::ostream& MultiObjectiveFormula::writeToStream(std::ostream &out, bool /* allowParentheses */) const {
// No parentheses necessary
out << "multi("; out << "multi(";
for(uint_fast64_t index = 0; index < this->getNumberOfSubformulas(); ++index){ for(uint_fast64_t index = 0; index < this->getNumberOfSubformulas(); ++index){
if(index>0){ if(index>0){

2
src/storm/logic/MultiObjectiveFormula.h

@ -27,7 +27,7 @@ namespace storm {
virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override; virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override;
virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override; virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
std::vector<std::shared_ptr<Formula const>> subformulas; std::vector<std::shared_ptr<Formula const>> subformulas;
}; };

10
src/storm/logic/NextFormula.cpp

@ -20,9 +20,15 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& NextFormula::writeToStream(std::ostream& out) const { std::ostream& NextFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
if (allowParentheses) {
out << "(";
}
out << "X "; out << "X ";
this->getSubformula().writeToStream(out); this->getSubformula().writeToStream(out, !this->getSubformula().isUnaryFormula());
if (allowParentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/NextFormula.h

@ -18,7 +18,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
}; };
} }
} }

3
src/storm/logic/OperatorFormula.cpp

@ -104,7 +104,8 @@ namespace storm {
} }
} }
std::ostream& OperatorFormula::writeToStream(std::ostream& out) const { std::ostream& OperatorFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary
if (hasOptimalityType()) { if (hasOptimalityType()) {
out << (getOptimalityType() == OptimizationDirection::Minimize ? "min" : "max"); out << (getOptimalityType() == OptimizationDirection::Minimize ? "min" : "max");
} }

2
src/storm/logic/OperatorFormula.h

@ -56,7 +56,7 @@ namespace storm {
virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const override; virtual void gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
protected: protected:
OperatorInformation operatorInformation; OperatorInformation operatorInformation;

5
src/storm/logic/ProbabilityOperatorFormula.cpp

@ -19,9 +19,10 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& ProbabilityOperatorFormula::writeToStream(std::ostream& out) const { std::ostream& ProbabilityOperatorFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary
out << "P"; out << "P";
OperatorFormula::writeToStream(out); OperatorFormula::writeToStream(out, false);
return out; return out;
} }
} }

2
src/storm/logic/ProbabilityOperatorFormula.h

@ -17,7 +17,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
}; };
} }
} }

3
src/storm/logic/QuantileFormula.cpp

@ -73,7 +73,8 @@ namespace storm {
subformula->gatherReferencedRewardModels(referencedRewardModels); subformula->gatherReferencedRewardModels(referencedRewardModels);
} }
std::ostream& QuantileFormula::writeToStream(std::ostream& out) const { std::ostream& QuantileFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary
out << "quantile("; out << "quantile(";
for (auto const& bv : boundVariables) { for (auto const& bv : boundVariables) {
out << bv.getName() << ", "; out << bv.getName() << ", ";

2
src/storm/logic/QuantileFormula.h

@ -29,7 +29,7 @@ namespace storm {
virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override; virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override;
virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override; virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
std::vector<storm::expressions::Variable> boundVariables; std::vector<storm::expressions::Variable> boundVariables;
std::shared_ptr<Formula const> subformula; std::shared_ptr<Formula const> subformula;

3
src/storm/logic/RewardOperatorFormula.cpp

@ -44,7 +44,8 @@ namespace storm {
return rewardMeasureType; return rewardMeasureType;
} }
std::ostream& RewardOperatorFormula::writeToStream(std::ostream& out) const { std::ostream& RewardOperatorFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary
out << "R"; out << "R";
out << "[" << rewardMeasureType << "]"; out << "[" << rewardMeasureType << "]";
if (this->hasRewardModelName()) { if (this->hasRewardModelName()) {

2
src/storm/logic/RewardOperatorFormula.h

@ -20,7 +20,7 @@ namespace storm {
virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override; virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
/*! /*!
* Retrieves whether the reward model refers to a specific reward model. * Retrieves whether the reward model refers to a specific reward model.

3
src/storm/logic/TimeOperatorFormula.cpp

@ -24,7 +24,8 @@ namespace storm {
return rewardMeasureType; return rewardMeasureType;
} }
std::ostream& TimeOperatorFormula::writeToStream(std::ostream& out) const { std::ostream& TimeOperatorFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary
out << "T"; out << "T";
out << "[" << rewardMeasureType << "]"; out << "[" << rewardMeasureType << "]";
OperatorFormula::writeToStream(out); OperatorFormula::writeToStream(out);

2
src/storm/logic/TimeOperatorFormula.h

@ -19,7 +19,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
/*! /*!
* Retrieves the measure type of the operator. * Retrieves the measure type of the operator.

3
src/storm/logic/TotalRewardFormula.cpp

@ -32,7 +32,8 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& TotalRewardFormula::writeToStream(std::ostream& out) const { std::ostream& TotalRewardFormula::writeToStream(std::ostream& out, bool /* allowParentheses */) const {
// No parentheses necessary
out << "C"; out << "C";
if (hasRewardAccumulation()) { if (hasRewardAccumulation()) {
out << "[" << getRewardAccumulation() << "]"; out << "[" << getRewardAccumulation() << "]";

2
src/storm/logic/TotalRewardFormula.h

@ -24,7 +24,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
boost::optional<RewardAccumulation> rewardAccumulation; boost::optional<RewardAccumulation> rewardAccumulation;

13
src/storm/logic/UnaryBooleanPathFormula.cpp

@ -36,12 +36,17 @@ namespace storm {
return this->getOperator() == OperatorType::Not; return this->getOperator() == OperatorType::Not;
} }
std::ostream& UnaryBooleanPathFormula::writeToStream(std::ostream& out) const { std::ostream& UnaryBooleanPathFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
if (allowParentheses) {
out << "(";
}
switch (operatorType) { switch (operatorType) {
case OperatorType::Not: out << "!("; break; case OperatorType::Not: out << "!"; break;
}
this->getSubformula().writeToStream(out, !this->getSubformula().isUnaryFormula());
if (allowParentheses) {
out << ")";
} }
this->getSubformula().writeToStream(out);
out << ")";
return out; return out;
} }
} }

2
src/storm/logic/UnaryBooleanPathFormula.h

@ -28,7 +28,7 @@ namespace storm {
virtual bool isNot() const; virtual bool isNot() const;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
OperatorType operatorType; OperatorType operatorType;

13
src/storm/logic/UnaryBooleanStateFormula.cpp

@ -27,12 +27,17 @@ namespace storm {
return this->getOperator() == OperatorType::Not; return this->getOperator() == OperatorType::Not;
} }
std::ostream& UnaryBooleanStateFormula::writeToStream(std::ostream& out) const { std::ostream& UnaryBooleanStateFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
if (allowParentheses) {
out << "(";
}
switch (operatorType) { switch (operatorType) {
case OperatorType::Not: out << "!("; break; case OperatorType::Not: out << "!"; break;
}
this->getSubformula().writeToStream(out, !this->getSubformula().isUnaryFormula());
if (allowParentheses) {
out << ")";
} }
this->getSubformula().writeToStream(out);
out << ")";
return out; return out;
} }
} }

2
src/storm/logic/UnaryBooleanStateFormula.h

@ -24,7 +24,7 @@ namespace storm {
virtual bool isNot() const; virtual bool isNot() const;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
private: private:
OperatorType operatorType; OperatorType operatorType;

12
src/storm/logic/UntilFormula.cpp

@ -20,10 +20,16 @@ namespace storm {
return visitor.visit(*this, data); return visitor.visit(*this, data);
} }
std::ostream& UntilFormula::writeToStream(std::ostream& out) const { std::ostream& UntilFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
this->getLeftSubformula().writeToStream(out); if (allowParentheses) {
out << "(";
}
this->getLeftSubformula().writeToStream(out, true);
out << " U "; out << " U ";
this->getRightSubformula().writeToStream(out); this->getRightSubformula().writeToStream(out, true);
if (allowParentheses) {
out << ")";
}
return out; return out;
} }
} }

2
src/storm/logic/UntilFormula.h

@ -18,7 +18,7 @@ namespace storm {
virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override;
virtual std::ostream& writeToStream(std::ostream& out) const override; virtual std::ostream& writeToStream(std::ostream& out, bool allowParentheses = false) const override;
}; };
} }
} }

|||||||
100:0
Loading…
Cancel
Save