]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | [#entire_input] |
2 | [section entire_input] | |
3 | ||
4 | [h1 Synopsis] | |
5 | ||
6 | template <class P, class Msg = error::end_of_input_expected> | |
7 | struct entire_input; | |
8 | ||
9 | This is a [link parser_combinator parser combinator]. | |
10 | ||
11 | [table Arguments | |
12 | [[Name] [Type]] | |
13 | [[`P`] [[link parser parser]]] | |
14 | [[`Msg`] [[link parsing_error_message parsing error message]]] | |
15 | ] | |
16 | ||
17 | [h1 Description] | |
18 | ||
19 | It parses the input using `P` and checks if it consumes the entire input. If `P` | |
20 | fails or doesn't consume the entire input, `entire_input` fails. Otherwise | |
21 | `entire_input` returns the result of `P`. When `P` does not consume the entire | |
22 | input, the error message returned by `entire_input` is `Msg`. | |
23 | ||
24 | [h1 Header] | |
25 | ||
26 | #include <boost/metaparse/entire_input.hpp> | |
27 | ||
28 | [h1 Expression semantics] | |
29 | ||
30 | For any `p` parser and `e` parsing error message the following are equivalent | |
31 | ||
32 | entire_input<p, e> | |
33 | ||
34 | first_of< | |
35 | p, | |
36 | change_error_message<empty</* some metaprogramming value */>, e> | |
37 | > | |
38 | ||
39 | [h1 Example] | |
40 | ||
41 | #include <boost/metaparse/entire_input.hpp> | |
42 | #include <boost/metaparse/int_.hpp> | |
43 | #include <boost/metaparse/string.hpp> | |
44 | #include <boost/metaparse/start.hpp> | |
45 | #include <boost/metaparse/get_result.hpp> | |
46 | #include <boost/metaparse/get_message.hpp> | |
47 | #include <boost/metaparse/define_error.hpp> | |
48 | ||
49 | using namespace boost::metaparse; | |
50 | ||
51 | BOOST_METAPARSE_DEFINE_ERROR(extra_chars_at_end, "Extra chars at end"); | |
52 | ||
53 | using int_parser = entire_input<int_, extra_chars_at_end>; | |
54 | ||
55 | static_assert( | |
56 | get_result< | |
57 | int_parser::apply<BOOST_METAPARSE_STRING("1113"), start> | |
58 | >::type::value == 1113, | |
59 | "it should parse the input if it contains only an integer" | |
60 | ); | |
61 | ||
62 | static_assert( | |
63 | std::is_same< | |
64 | get_message< | |
65 | int_parser::apply<BOOST_METAPARSE_STRING("1113mm"), start> | |
66 | >::type, | |
67 | extra_chars_at_end | |
68 | >::type::value, | |
69 | "it should return the specified error message when there are extra characters" | |
70 | ); | |
71 | ||
72 | [endsect] | |
73 |