34class ExpressionParser :
public qi::grammar<Iterator, storm::expressions::Expression(), Skipper> {
51 qi::symbols<char, uint_fast64_t>
const& invalidIdentifiers_ = qi::symbols<char, uint_fast64_t>(),
bool enableErrorHandling =
true,
52 bool allowBacktracking =
false);
65 void setIdentifierMapping(qi::symbols<char, storm::expressions::Expression>
const* identifiers_);
74 void setIdentifierMapping(std::unordered_map<std::string, storm::expressions::Expression>
const& identifierMapping);
96 struct orOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
103 orOperatorStruct orOperator_;
105 struct andOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
106 andOperatorStruct() {
112 andOperatorStruct andOperator_;
114 struct equalityOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
115 equalityOperatorStruct() {
121 equalityOperatorStruct equalityOperator_;
123 struct relationalOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
124 relationalOperatorStruct() {
131 relationalOperatorStruct relationalOperator_;
133 struct plusOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
134 plusOperatorStruct() {
140 plusOperatorStruct plusOperator_;
142 struct multiplicationOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
143 multiplicationOperatorStruct() {
149 multiplicationOperatorStruct multiplicationOperator_;
151 struct infixPowerModuloOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
152 infixPowerModuloOperatorStruct() {
158 infixPowerModuloOperatorStruct infixPowerModuloOperator_;
160 struct unaryOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
161 unaryOperatorStruct() {
167 unaryOperatorStruct unaryOperator_;
169 struct floorCeilOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
170 floorCeilOperatorStruct() {
176 floorCeilOperatorStruct floorCeilOperator_;
178 struct minMaxOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
179 minMaxOperatorStruct() {
185 minMaxOperatorStruct minMaxOperator_;
187 struct prefixPowerModuloLogarithmOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
188 prefixPowerModuloLogarithmOperatorStruct() {
195 prefixPowerModuloLogarithmOperatorStruct prefixPowerModuloLogarithmOperator_;
197 struct predicateOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
198 predicateOperatorStruct() {
205 predicateOperatorStruct predicateOperator_;
207 std::unique_ptr<ExpressionCreator> expressionCreator;
210 qi::symbols<char, uint_fast64_t> invalidIdentifiers_;
213 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> expression;
214 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> iteExpression;
215 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> orExpression;
216 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> andExpression;
217 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> relativeExpression;
218 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> equalityExpression;
219 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> plusExpression;
220 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> multiplicationExpression;
221 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<bool>, Skipper> prefixPowerModuloLogarithmExpression;
222 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> infixPowerModuloExpression;
223 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> unaryExpression;
224 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> atomicExpression;
225 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> literalExpression;
226 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<bool>, Skipper> integerLiteralExpression;
227 qi::rule<
Iterator, qi::unused_type(
bool), Skipper> integerOverflowHelperRule;
228 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> identifierExpression;
229 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::OperatorType, storm::expressions::Expression>, Skipper>
231 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::OperatorType>, Skipper> floorCeilExpression;
232 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> roundExpression;
233 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> predicateExpression;
234 qi::rule<
Iterator, std::string(), Skipper> identifier;
237 boost::spirit::qi::real_parser<storm::RationalNumber, RationalPolicies<storm::RationalNumber>> floatLiteral_;
238 boost::spirit::qi::int_parser<storm::RationalNumber> integerLiteral_;
240 bool isValidIdentifier(std::string
const& identifier);
243 phoenix::function<SpiritErrorHandler> handler;