You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.9 KiB
42 lines
1.9 KiB
#include "BooleanExpressionGrammar.h"
|
|
|
|
#include "IntegerExpressionGrammar.h"
|
|
#include "ConstBooleanExpressionGrammar.h"
|
|
|
|
namespace storm {
|
|
namespace parser {
|
|
namespace prism {
|
|
|
|
BooleanExpressionGrammar::BooleanExpressionGrammar(std::shared_ptr<VariableState>& state)
|
|
: BooleanExpressionGrammar::base_type(booleanExpression), BaseGrammar(state) {
|
|
|
|
booleanExpression %= orExpression;
|
|
booleanExpression.name("boolean expression");
|
|
|
|
orExpression = andExpression[qi::_val = qi::_1] >> *(qi::lit("|") >> andExpression)[qi::_val = phoenix::bind(&BaseGrammar::createOr, this, qi::_val, qi::_1)];
|
|
orExpression.name("boolean expression");
|
|
|
|
andExpression = notExpression[qi::_val = qi::_1] >> *(qi::lit("&") >> notExpression)[qi::_val = phoenix::bind(&BaseGrammar::createAnd, this, qi::_val, qi::_1)];
|
|
andExpression.name("boolean expression");
|
|
|
|
notExpression = atomicBooleanExpression[qi::_val = qi::_1] | (qi::lit("!") >> atomicBooleanExpression)[qi::_val = phoenix::bind(&BaseGrammar::createNot, this, qi::_1)];
|
|
notExpression.name("boolean expression");
|
|
|
|
atomicBooleanExpression %= (relativeExpression | booleanVariableExpression | qi::lit("(") >> booleanExpression >> qi::lit(")") | ConstBooleanExpressionGrammar::instance(this->state));
|
|
atomicBooleanExpression.name("boolean expression");
|
|
|
|
relativeExpression = (IntegerExpressionGrammar::instance(this->state) >> relations_ >> IntegerExpressionGrammar::instance(this->state))[qi::_val = phoenix::bind(&BaseGrammar::createRelation, this, qi::_1, qi::_2, qi::_3)];
|
|
relativeExpression.name("relative expression");
|
|
|
|
booleanVariableExpression = IdentifierGrammar::instance(this->state)[qi::_val = phoenix::bind(&BaseGrammar::getBoolVariable, this, qi::_1)];
|
|
booleanVariableExpression.name("boolean variable");
|
|
}
|
|
|
|
void BooleanExpressionGrammar::prepareSecondRun() {
|
|
booleanVariableExpression %= this->state->booleanVariables_;
|
|
booleanVariableExpression.name("boolean variable");
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|