// Copyright (c) 2001-2010 Hartmut Kaiser // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // The purpose of this example is to show how a simple custom primitive parser // component can be written. We develop a custom parser exposing the current // iterator position as its attribute. // // For more information see: http://spirit.sourceforge.net/home/?page_id=567 #include #include #include #include #include "iter_pos.hpp" namespace qi = boost::spirit::qi; int main() { using custom_parser::iter_pos; std::string prefix, suffix; // attributes receiving the std::string::iterator position; // parsed values std::string input("prefix1234567"); std::string::iterator first = input.begin(); bool result = qi::parse(first, input.end() , +qi::alpha >> iter_pos >> +qi::digit , prefix, position, suffix); if (result) { std::cout << "-------------------------------- \n"; std::cout << "Parsing succeeded\n"; std::cout << "prefix is: " << prefix << "\n"; std::cout << "suffix is: " << suffix << "\n"; std::cout << "position is: " << std::distance(input.begin(), position) << "\n"; std::cout << "-------------------------------- \n"; } else { std::cout << "-------------------------------- \n"; std::cout << "Parsing failed\n"; std::cout << "-------------------------------- \n"; } return 0; }