12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- [#iterate_c]
- [section iterate_c]
- [h1 Synopsis]
- template <class P, int N>
- struct iterate_c;
- This is a [link parser_combinator parser combinator].
- [table Arguments
- [[Name] [Type]]
- [[`P`] [[link parser parser]]]
- [[`N`] [non-negative integer value]]
- ]
- [h1 Description]
- It applies `P` on the input string `N` times. The result of parsing is a
- sequence of the results of the individual applications of `P`. `P` has to accept
- the input `N` times for `iterate_c` to accept it.
- [h1 Header]
- #include <boost/metaparse/iterate_c.hpp>
- [h1 Expression semantics]
- For any `p` parser, `n` integer value the following are equivalent:
- iterate_c<p, n>
-
- sequence<
- p, // 1.
- p, // 2.
- // ...
- p // n.
- >
- [h1 Example]
- #include <boost/metaparse/iterate_c.hpp>
- #include <boost/metaparse/digit.hpp>
- #include <boost/metaparse/string.hpp>
- #include <boost/metaparse/start.hpp>
- #include <boost/metaparse/get_result.hpp>
- #include <boost/metaparse/is_error.hpp>
-
- #include <boost/mpl/vector.hpp>
- #include <boost/mpl/equal.hpp>
- #include <boost/mpl/char.hpp>
-
- using namespace boost::metaparse;
-
- static_assert(
- boost::mpl::equal<
- boost::mpl::vector<
- boost::mpl::char_<'1'>,
- boost::mpl::char_<'2'>,
- boost::mpl::char_<'3'>
- >,
- get_result<
- iterate_c<digit, 3>::apply<BOOST_METAPARSE_STRING("123"), start>
- >::type
- >::type::value,
- "the result should be the sequence of the individual applications of digit"
- );
-
- static_assert(
- boost::mpl::equal<
- boost::mpl::vector<
- boost::mpl::char_<'1'>,
- boost::mpl::char_<'2'>,
- boost::mpl::char_<'3'>
- >,
- get_result<
- iterate_c<digit, 3>::apply<BOOST_METAPARSE_STRING("1234"), start>
- >::type
- >::type::value,
- "only three iterations should be made"
- );
-
- static_assert(
- is_error<
- iterate_c<digit, 3>::apply<BOOST_METAPARSE_STRING("12"), start>
- >::type::value,
- "it should fail when digit can not be applied three times"
- );
- [endsect]
|