31 changed files with 653 additions and 202 deletions
-
17src/logic/Formula.cpp
-
12src/logic/Formula.h
-
46src/logic/FormulaInformation.cpp
-
29src/logic/FormulaInformation.h
-
85src/logic/FormulaInformationVisitor.cpp
-
38src/logic/FormulaInformationVisitor.h
-
165src/logic/FragmentChecker.cpp
-
148src/logic/FragmentSpecification.cpp
-
43src/logic/FragmentSpecification.h
-
4src/logic/RewardOperatorFormula.cpp
-
4src/logic/UnaryStateFormula.cpp
-
2src/logic/UnaryStateFormula.h
-
4src/modelchecker/csl/HybridCtmcCslModelChecker.cpp
-
4src/modelchecker/csl/SparseCtmcCslModelChecker.cpp
-
6src/modelchecker/csl/SparseMarkovAutomatonCslModelChecker.cpp
-
4src/modelchecker/prctl/HybridDtmcPrctlModelChecker.cpp
-
13src/modelchecker/prctl/HybridMdpPrctlModelChecker.cpp
-
31src/modelchecker/prctl/SparseDtmcPrctlModelChecker.cpp
-
2src/modelchecker/prctl/SparseDtmcPrctlModelChecker.h
-
31src/modelchecker/prctl/SparseMdpPrctlModelChecker.cpp
-
2src/modelchecker/prctl/SparseMdpPrctlModelChecker.h
-
14src/modelchecker/prctl/SymbolicDtmcPrctlModelChecker.cpp
-
13src/modelchecker/prctl/SymbolicMdpPrctlModelChecker.cpp
-
4src/modelchecker/propositional/SparsePropositionalModelChecker.cpp
-
4src/modelchecker/propositional/SymbolicPropositionalModelChecker.cpp
-
58src/modelchecker/reachability/SparseDtmcEliminationModelChecker.cpp
-
2src/modelchecker/reachability/SparseDtmcEliminationModelChecker.h
-
24src/parser/FormulaParser.cpp
-
21src/storage/bisimulation/BisimulationDecomposition.cpp
-
14test/functional/logic/FragmentCheckerTest.cpp
-
11test/functional/parser/FormulaParserTest.cpp
@ -0,0 +1,46 @@ |
|||
#include "src/logic/FormulaInformation.h"
|
|||
|
|||
namespace storm { |
|||
namespace logic { |
|||
FormulaInformation::FormulaInformation() { |
|||
this->mContainsRewardOperator = false; |
|||
this->mContainsNextFormula = false; |
|||
this->mContainsBoundedUntilFormula = false; |
|||
} |
|||
|
|||
bool FormulaInformation::containsRewardOperator() const { |
|||
return this->mContainsRewardOperator; |
|||
} |
|||
|
|||
bool FormulaInformation::containsNextFormula() const { |
|||
return this->mContainsNextFormula; |
|||
} |
|||
|
|||
bool FormulaInformation::containsBoundedUntilFormula() const { |
|||
return this-mContainsBoundedUntilFormula; |
|||
} |
|||
|
|||
FormulaInformation FormulaInformation::join(FormulaInformation const& other) { |
|||
FormulaInformation result; |
|||
result.mContainsRewardOperator = this->containsRewardOperator() || other.containsRewardOperator(); |
|||
result.mContainsNextFormula = this->containsNextFormula() || other.containsNextFormula(); |
|||
result.mContainsBoundedUntilFormula = this->containsBoundedUntilFormula() || other.containsBoundedUntilFormula(); |
|||
return result; |
|||
} |
|||
|
|||
FormulaInformation& FormulaInformation::setContainsRewardOperator(bool newValue) { |
|||
this->mContainsRewardOperator = newValue; |
|||
return *this; |
|||
} |
|||
|
|||
FormulaInformation& FormulaInformation::setContainsNextFormula(bool newValue) { |
|||
this->mContainsNextFormula = newValue; |
|||
return *this; |
|||
} |
|||
|
|||
FormulaInformation& FormulaInformation::setContainsBoundedUntilFormula(bool newValue) { |
|||
this->mContainsBoundedUntilFormula = newValue; |
|||
return *this; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,29 @@ |
|||
#ifndef STORM_LOGIC_FORMULAINFORMATION_H_ |
|||
#define STORM_LOGIC_FORMULAINFORMATION_H_ |
|||
|
|||
namespace storm { |
|||
namespace logic { |
|||
|
|||
class FormulaInformation { |
|||
public: |
|||
FormulaInformation(); |
|||
bool containsRewardOperator() const; |
|||
bool containsNextFormula() const; |
|||
bool containsBoundedUntilFormula() const; |
|||
|
|||
FormulaInformation join(FormulaInformation const& other); |
|||
|
|||
FormulaInformation& setContainsRewardOperator(bool newValue = true); |
|||
FormulaInformation& setContainsNextFormula(bool newValue = true); |
|||
FormulaInformation& setContainsBoundedUntilFormula(bool newValue = true); |
|||
|
|||
private: |
|||
bool mContainsRewardOperator; |
|||
bool mContainsNextFormula; |
|||
bool mContainsBoundedUntilFormula; |
|||
}; |
|||
|
|||
} |
|||
} |
|||
|
|||
#endif /* STORM_LOGIC_FORMULAINFORMATION_H_ */ |
@ -0,0 +1,85 @@ |
|||
#include "src/logic/FormulaInformationVisitor.h"
|
|||
|
|||
#include "src/logic/Formulas.h"
|
|||
|
|||
namespace storm { |
|||
namespace logic { |
|||
FormulaInformation FormulaInformationVisitor::getInformation(Formula const& f) const { |
|||
boost::any result = f.accept(*this, boost::any()); |
|||
return boost::any_cast<FormulaInformation>(result); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(AtomicExpressionFormula const& f, boost::any const& data) const { |
|||
return FormulaInformation(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(AtomicLabelFormula const& f, boost::any const& data) const { |
|||
return FormulaInformation(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(BinaryBooleanStateFormula const& f, boost::any const& data) const { |
|||
return FormulaInformation(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(BooleanLiteralFormula const& f, boost::any const& data) const { |
|||
return FormulaInformation(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(BoundedUntilFormula const& f, boost::any const& data) const { |
|||
return boost::any_cast<FormulaInformation>(f.getLeftSubformula().accept(*this)).join(boost::any_cast<FormulaInformation>(f.getRightSubformula().accept(*this))).setContainsBoundedUntilFormula(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(ConditionalFormula const& f, boost::any const& data) const { |
|||
return boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this)).join(boost::any_cast<FormulaInformation>(f.getConditionFormula().accept(*this))); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(CumulativeRewardFormula const& f, boost::any const& data) const { |
|||
return FormulaInformation(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(EventuallyFormula const& f, boost::any const& data) const { |
|||
return f.getSubformula().accept(*this); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(ExpectedTimeOperatorFormula const& f, boost::any const& data) const { |
|||
return f.getSubformula().accept(*this); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(GloballyFormula const& f, boost::any const& data) const { |
|||
return f.getSubformula().accept(*this); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(InstantaneousRewardFormula const& f, boost::any const& data) const { |
|||
return FormulaInformation(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(LongRunAverageOperatorFormula const& f, boost::any const& data) const { |
|||
return f.getSubformula().accept(*this); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(LongRunAverageRewardFormula const& f, boost::any const& data) const { |
|||
return FormulaInformation(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(NextFormula const& f, boost::any const& data) const { |
|||
return boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this)).setContainsNextFormula(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(ProbabilityOperatorFormula const& f, boost::any const& data) const { |
|||
return f.getSubformula().accept(*this); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(RewardOperatorFormula const& f, boost::any const& data) const { |
|||
return boost::any_cast<FormulaInformation>(f.getSubformula().accept(*this)).setContainsRewardOperator(); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(UnaryBooleanStateFormula const& f, boost::any const& data) const { |
|||
return f.getSubformula().accept(*this); |
|||
} |
|||
|
|||
boost::any FormulaInformationVisitor::visit(UntilFormula const& f, boost::any const& data) const { |
|||
return boost::any_cast<FormulaInformation>(f.getLeftSubformula().accept(*this)).join(boost::any_cast<FormulaInformation>(f.getRightSubformula().accept(*this))); |
|||
} |
|||
|
|||
} |
|||
} |
@ -0,0 +1,38 @@ |
|||
#ifndef STORM_LOGIC_FORMULAINFORMATIONVISITOR_H_ |
|||
#define STORM_LOGIC_FORMULAINFORMATIONVISITOR_H_ |
|||
|
|||
#include "src/logic/FormulaVisitor.h" |
|||
#include "src/logic/FormulaInformation.h" |
|||
|
|||
namespace storm { |
|||
namespace logic { |
|||
|
|||
class FormulaInformationVisitor : public FormulaVisitor { |
|||
public: |
|||
FormulaInformation getInformation(Formula const& f) const; |
|||
|
|||
virtual boost::any visit(AtomicExpressionFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(AtomicLabelFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(BinaryBooleanStateFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(BooleanLiteralFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(BoundedUntilFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(ConditionalFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(CumulativeRewardFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(EventuallyFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(ExpectedTimeOperatorFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(GloballyFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(InstantaneousRewardFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(LongRunAverageOperatorFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(LongRunAverageRewardFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(NextFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(ProbabilityOperatorFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(RewardOperatorFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(UnaryBooleanStateFormula const& f, boost::any const& data) const override; |
|||
virtual boost::any visit(UntilFormula const& f, boost::any const& data) const override; |
|||
}; |
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
#endif /* STORM_LOGIC_FORMULAINFORMATIONVISITOR_H_ */ |
@ -0,0 +1,14 @@ |
|||
#include "gtest/gtest.h"
|
|||
#include "storm-config.h"
|
|||
#include "src/parser/FormulaParser.h"
|
|||
#include "src/logic/FragmentSpecification.h"
|
|||
#include "src/exceptions/WrongFormatException.h"
|
|||
|
|||
TEST(FragmentCheckerTest, PctlTest) { |
|||
storm::parser::FormulaParser formulaParser; |
|||
|
|||
std::string input = "\"label\""; |
|||
std::shared_ptr<const storm::logic::Formula> formula(nullptr); |
|||
ASSERT_NO_THROW(formula = formulaParser.parseSingleFormulaFromString(input)); |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue