12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- [#entire_input]
- [section entire_input]
- [h1 Synopsis]
- template <class P, class Msg = error::end_of_input_expected>
- struct entire_input;
- This is a [link parser_combinator parser combinator].
- [table Arguments
- [[Name] [Type]]
- [[`P`] [[link parser parser]]]
- [[`Msg`] [[link parsing_error_message parsing error message]]]
- ]
- [h1 Description]
- It parses the input using `P` and checks if it consumes the entire input. If `P`
- fails or doesn't consume the entire input, `entire_input` fails. Otherwise
- `entire_input` returns the result of `P`. When `P` does not consume the entire
- input, the error message returned by `entire_input` is `Msg`.
- [h1 Header]
- #include <boost/metaparse/entire_input.hpp>
- [h1 Expression semantics]
- For any `p` parser and `e` parsing error message the following are equivalent
- entire_input<p, e>
-
- first_of<
- p,
- change_error_message<empty</* some metaprogramming value */>, e>
- >
- [h1 Example]
- #include <boost/metaparse/entire_input.hpp>
- #include <boost/metaparse/int_.hpp>
- #include <boost/metaparse/string.hpp>
- #include <boost/metaparse/start.hpp>
- #include <boost/metaparse/get_result.hpp>
- #include <boost/metaparse/get_message.hpp>
- #include <boost/metaparse/define_error.hpp>
-
- using namespace boost::metaparse;
-
- BOOST_METAPARSE_DEFINE_ERROR(extra_chars_at_end, "Extra chars at end");
-
- using int_parser = entire_input<int_, extra_chars_at_end>;
-
- static_assert(
- get_result<
- int_parser::apply<BOOST_METAPARSE_STRING("1113"), start>
- >::type::value == 1113,
- "it should parse the input if it contains only an integer"
- );
-
- static_assert(
- std::is_same<
- get_message<
- int_parser::apply<BOOST_METAPARSE_STRING("1113mm"), start>
- >::type,
- extra_chars_at_end
- >::type::value,
- "it should return the specified error message when there are extra characters"
- );
- [endsect]
|