53 qi::symbols<char, uint_fast64_t>
const& invalidIdentifiers_ = qi::symbols<char, uint_fast64_t>(),
bool enableErrorHandling =
true,
54 bool allowBacktracking =
false);
67 void setIdentifierMapping(qi::symbols<char, storm::expressions::Expression>
const* identifiers_);
76 void setIdentifierMapping(std::unordered_map<std::string, storm::expressions::Expression>
const& identifierMapping);
98 struct orOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
105 orOperatorStruct orOperator_;
107 struct andOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
108 andOperatorStruct() {
114 andOperatorStruct andOperator_;
116 struct equalityOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
117 equalityOperatorStruct() {
123 equalityOperatorStruct equalityOperator_;
125 struct relationalOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
126 relationalOperatorStruct() {
133 relationalOperatorStruct relationalOperator_;
135 struct plusOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
136 plusOperatorStruct() {
142 plusOperatorStruct plusOperator_;
144 struct multiplicationOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
145 multiplicationOperatorStruct() {
151 multiplicationOperatorStruct multiplicationOperator_;
153 struct infixPowerModuloOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
154 infixPowerModuloOperatorStruct() {
160 infixPowerModuloOperatorStruct infixPowerModuloOperator_;
162 struct unaryOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
163 unaryOperatorStruct() {
169 unaryOperatorStruct unaryOperator_;
171 struct floorCeilOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
172 floorCeilOperatorStruct() {
178 floorCeilOperatorStruct floorCeilOperator_;
180 struct minMaxOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
181 minMaxOperatorStruct() {
187 minMaxOperatorStruct minMaxOperator_;
189 struct prefixPowerModuloLogarithmOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
190 prefixPowerModuloLogarithmOperatorStruct() {
197 prefixPowerModuloLogarithmOperatorStruct prefixPowerModuloLogarithmOperator_;
199 struct predicateOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
200 predicateOperatorStruct() {
207 predicateOperatorStruct predicateOperator_;
209 std::unique_ptr<ExpressionCreator> expressionCreator;
212 qi::symbols<char, uint_fast64_t> invalidIdentifiers_;
215 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> expression;
216 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> iteExpression;
217 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> orExpression;
218 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> andExpression;
219 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> relativeExpression;
220 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> equalityExpression;
221 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> plusExpression;
222 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> multiplicationExpression;
223 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<bool>, Skipper> prefixPowerModuloLogarithmExpression;
224 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> infixPowerModuloExpression;
225 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> unaryExpression;
226 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> atomicExpression;
227 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> literalExpression;
228 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<bool>, Skipper> integerLiteralExpression;
229 qi::rule<
Iterator, qi::unused_type(
bool), Skipper> integerOverflowHelperRule;
230 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> identifierExpression;
231 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::OperatorType, storm::expressions::Expression>, Skipper>
233 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::OperatorType>, Skipper> floorCeilExpression;
234 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> roundExpression;
235 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> predicateExpression;
236 qi::rule<
Iterator, std::string(), Skipper> identifier;
239 boost::spirit::qi::real_parser<storm::RationalNumber, RationalPolicies<storm::RationalNumber>> floatLiteral_;
240 boost::spirit::qi::int_parser<storm::RationalNumber> integerLiteral_;
242 bool isValidIdentifier(std::string
const& identifier);
245 phoenix::function<SpiritErrorHandler> handler;