]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/example/qi/iter_pos_parser.cpp
1 // Copyright (c) 2001-2010 Hartmut Kaiser
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)
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.
10 // For more information see: http://spirit.sourceforge.net/home/?page_id=567
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>
17 #include "iter_pos.hpp"
19 namespace qi
= boost::spirit::qi
;
23 using custom_parser::iter_pos
;
25 std::string prefix
, suffix
; // attributes receiving the
26 std::string::iterator position
; // parsed values
28 std::string
input("prefix1234567");
29 std::string::iterator first
= input
.begin();
31 qi::parse(first
, input
.end()
32 , +qi::alpha
>> iter_pos
>> +qi::digit
33 , prefix
, position
, suffix
);
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";
46 std::cout
<< "-------------------------------- \n";
47 std::cout
<< "Parsing failed\n";
48 std::cout
<< "-------------------------------- \n";