35class ExpressionParser :
public qi::grammar<Iterator, storm::expressions::Expression(), Skipper> {
52 qi::symbols<char, uint_fast64_t>
const& invalidIdentifiers_ = qi::symbols<char, uint_fast64_t>(),
bool enableErrorHandling =
true,
53 bool allowBacktracking =
false);
66 void setIdentifierMapping(qi::symbols<char, storm::expressions::Expression>
const* identifiers_);
75 void setIdentifierMapping(std::unordered_map<std::string, storm::expressions::Expression>
const& identifierMapping);
97 struct orOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
104 orOperatorStruct orOperator_;
106 struct andOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
107 andOperatorStruct() {
113 andOperatorStruct andOperator_;
115 struct equalityOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
116 equalityOperatorStruct() {
122 equalityOperatorStruct equalityOperator_;
124 struct relationalOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
125 relationalOperatorStruct() {
132 relationalOperatorStruct relationalOperator_;
134 struct plusOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
135 plusOperatorStruct() {
141 plusOperatorStruct plusOperator_;
143 struct multiplicationOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
144 multiplicationOperatorStruct() {
150 multiplicationOperatorStruct multiplicationOperator_;
152 struct infixPowerModuloOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
153 infixPowerModuloOperatorStruct() {
159 infixPowerModuloOperatorStruct infixPowerModuloOperator_;
161 struct unaryOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
162 unaryOperatorStruct() {
168 unaryOperatorStruct unaryOperator_;
170 struct floorCeilOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
171 floorCeilOperatorStruct() {
177 floorCeilOperatorStruct floorCeilOperator_;
179 struct minMaxOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
180 minMaxOperatorStruct() {
186 minMaxOperatorStruct minMaxOperator_;
188 struct prefixPowerModuloLogarithmOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
189 prefixPowerModuloLogarithmOperatorStruct() {
196 prefixPowerModuloLogarithmOperatorStruct prefixPowerModuloLogarithmOperator_;
198 struct predicateOperatorStruct : qi::symbols<char, storm::expressions::OperatorType> {
199 predicateOperatorStruct() {
206 predicateOperatorStruct predicateOperator_;
208 std::unique_ptr<ExpressionCreator> expressionCreator;
211 qi::symbols<char, uint_fast64_t> invalidIdentifiers_;
214 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> expression;
215 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> iteExpression;
216 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> orExpression;
217 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> andExpression;
218 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> relativeExpression;
219 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> equalityExpression;
220 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> plusExpression;
221 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> multiplicationExpression;
222 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<bool>, Skipper> prefixPowerModuloLogarithmExpression;
223 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::Expression>, Skipper> infixPowerModuloExpression;
224 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> unaryExpression;
225 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> atomicExpression;
226 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> literalExpression;
227 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<bool>, Skipper> integerLiteralExpression;
228 qi::rule<
Iterator, qi::unused_type(
bool), Skipper> integerOverflowHelperRule;
229 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> identifierExpression;
230 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::OperatorType, storm::expressions::Expression>, Skipper>
232 qi::rule<
Iterator, storm::expressions::Expression(), qi::locals<storm::expressions::OperatorType>, Skipper> floorCeilExpression;
233 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> roundExpression;
234 qi::rule<
Iterator, storm::expressions::Expression(), Skipper> predicateExpression;
235 qi::rule<
Iterator, std::string(), Skipper> identifier;
238 boost::spirit::qi::real_parser<storm::RationalNumber, RationalPolicies<storm::RationalNumber>> floatLiteral_;
239 boost::spirit::qi::int_parser<storm::RationalNumber> integerLiteral_;
241 bool isValidIdentifier(std::string
const& identifier);
244 phoenix::function<SpiritErrorHandler> handler;