libs/spirit/repository/example/qi/distinct.cpp
// 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 <iostream>
#include <string>
#include <vector>
//[qi_distinct_includes
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/repository/include/qi_distinct.hpp>
//]
//[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;
}