// 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 demonstrate different use cases for the // distinct parser. #include #include #include //[qi_distinct_includes #include #include //] //[qi_distinct_namespace using namespace boost::spirit; using namespace boost::spirit::ascii; using boost::spirit::repository::distinct; //] int main() { //[qi_distinct_description_ident { std::string str("description ident"); std::string::iterator first(str.begin()); bool r = qi::phrase_parse(first, str.end() , distinct(alnum | '_')["description"] >> -lit("--") >> +(alnum | '_') , space); BOOST_ASSERT(r && first == str.end()); } //] //[qi_distinct_description__ident { std::string str("description--ident"); std::string::iterator first(str.begin()); bool r = qi::phrase_parse(first, str.end() , distinct(alnum | '_')["description"] >> -lit("--") >> +(alnum | '_') , space); BOOST_ASSERT(r && first == str.end()); } //] //[qi_distinct_description_ident_error { std::string str("description-ident"); std::string::iterator first(str.begin()); bool r = qi::phrase_parse(first, str.end() , distinct(alnum | '_')["description"] >> -lit("--") >> +(alnum | '_') , space); BOOST_ASSERT(!r && first == str.begin()); } //] return 0; }