]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/example/qi/iter_pos_parser.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / example / qi / iter_pos_parser.cpp
1 // Copyright (c) 2001-2010 Hartmut Kaiser
2 //
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6 // The purpose of this example is to show how a simple custom primitive parser
7 // component can be written. We develop a custom parser exposing the current
8 // iterator position as its attribute.
9 //
10 // For more information see: http://spirit.sourceforge.net/home/?page_id=567
11
12 #include <boost/spirit/include/qi_parse_attr.hpp>
13 #include <boost/spirit/include/qi_char.hpp>
14 #include <boost/spirit/include/qi_operator.hpp>
15
16 #include <string>
17 #include "iter_pos.hpp"
18
19 namespace qi = boost::spirit::qi;
20
21 int main()
22 {
23 using custom_parser::iter_pos;
24
25 std::string prefix, suffix; // attributes receiving the
26 std::string::iterator position; // parsed values
27
28 std::string input("prefix1234567");
29 std::string::iterator first = input.begin();
30 bool result =
31 qi::parse(first, input.end()
32 , +qi::alpha >> iter_pos >> +qi::digit
33 , prefix, position, suffix);
34
35 if (result)
36 {
37 std::cout << "-------------------------------- \n";
38 std::cout << "Parsing succeeded\n";
39 std::cout << "prefix is: " << prefix << "\n";
40 std::cout << "suffix is: " << suffix << "\n";
41 std::cout << "position is: " << std::distance(input.begin(), position) << "\n";
42 std::cout << "-------------------------------- \n";
43 }
44 else
45 {
46 std::cout << "-------------------------------- \n";
47 std::cout << "Parsing failed\n";
48 std::cout << "-------------------------------- \n";
49 }
50 return 0;
51 }