summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/metaparse/example/getting_started/9.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/metaparse/example/getting_started/9.hpp')
-rw-r--r--src/boost/libs/metaparse/example/getting_started/9.hpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/boost/libs/metaparse/example/getting_started/9.hpp b/src/boost/libs/metaparse/example/getting_started/9.hpp
new file mode 100644
index 00000000..47366b91
--- /dev/null
+++ b/src/boost/libs/metaparse/example/getting_started/9.hpp
@@ -0,0 +1,42 @@
+#ifndef BOOST_METAPARSE_GETTING_STARTED_9_HPP
+#define BOOST_METAPARSE_GETTING_STARTED_9_HPP
+
+// Automatically generated header file
+
+// Definitions before section 8.2
+#include "8_2.hpp"
+
+// Definitions of section 8.2
+template <class S, class Item>
+ struct reverse_binary_op :
+ eval_binary_op<
+ typename boost::mpl::at_c<Item, 0>::type,
+ boost::mpl::at_c<Item, 1>::type::value,
+ S
+ >
+ {};
+
+#include <boost/metaparse/foldr_start_with_parser.hpp>
+
+using mult_exp3 =
+ foldr_start_with_parser<
+ sequence<int_token, one_of<times_token, divides_token>>, /* The parser applied repeatedly */
+ int_token, /* The parser parsing the last number */
+ boost::mpl::quote2<reverse_binary_op> /* The function called for every result */
+ /* of applying the above parser */
+ >;
+
+using exp_parser17 =
+ build_parser<
+ foldl_start_with_parser<
+ sequence<one_of<plus_token, minus_token>, mult_exp3>,
+ mult_exp3,
+ boost::mpl::quote2<binary_op>
+ >
+ >;
+
+// query:
+// exp_parser17::apply<BOOST_METAPARSE_STRING("8 / 4 / 2")>::type
+
+#endif
+