34 lines
1.6 KiB
34 lines
1.6 KiB
#include "ConstDoubleExpressionGrammar.h"
|
|
|
|
namespace storm {
|
|
namespace parser {
|
|
namespace prism {
|
|
|
|
ConstDoubleExpressionGrammar::ConstDoubleExpressionGrammar(std::shared_ptr<VariableState> const& state)
|
|
: ConstDoubleExpressionGrammar::base_type(constantDoubleExpression), BaseGrammar(state) {
|
|
|
|
constantDoubleExpression %= constantDoublePlusExpression;
|
|
constantDoubleExpression.name("constant double expression");
|
|
|
|
constantDoublePlusExpression %= constantDoubleMultExpression[qi::_val = qi::_1] >> *((qi::lit("+")[qi::_a = true] | qi::lit("-")[qi::_a = false]) >> constantDoubleMultExpression)
|
|
[qi::_val = phoenix::bind(&BaseGrammar::createDoublePlus, this, qi::_val, qi::_a, qi::_1)];
|
|
constantDoublePlusExpression.name("constant double expression");
|
|
|
|
constantDoubleMultExpression %= constantAtomicDoubleExpression[qi::_val = qi::_1] >> *((qi::lit("*")[qi::_a = true] | qi::lit("/")[qi::_a = false]) >> constantAtomicDoubleExpression)
|
|
[qi::_val = phoenix::bind(&BaseGrammar::createDoubleMult, this, qi::_val, qi::_a, qi::_1)];
|
|
constantDoubleMultExpression.name("constant double expression");
|
|
|
|
constantAtomicDoubleExpression %= (qi::lit("(") >> constantDoubleExpression >> qi::lit(")") | doubleConstantExpression);
|
|
constantAtomicDoubleExpression.name("constant double expression");
|
|
|
|
doubleConstantExpression %= (this->state->doubleConstants_ | this->state->integerConstants_ | doubleLiteralExpression);
|
|
doubleConstantExpression.name("double constant or literal");
|
|
|
|
doubleLiteralExpression = qi::double_[qi::_val = phoenix::bind(&BaseGrammar::createDoubleLiteral, this, qi::_1)];
|
|
doubleLiteralExpression.name("double literal");
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|