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