0ac381dcf3
[SVN r44371]
249 lines
7.9 KiB
C++
249 lines
7.9 KiB
C++
/*=============================================================================
|
|
Copyright (c) 2003 Vaclav Vesely
|
|
http://spirit.sourceforge.net/
|
|
|
|
Use, modification and distribution is subject to 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)
|
|
=============================================================================*/
|
|
#include <boost/spirit/include/classic_core.hpp>
|
|
#include <boost/spirit/include/classic_distinct.hpp>
|
|
#include <boost/detail/lightweight_test.hpp>
|
|
|
|
using namespace boost;
|
|
using namespace BOOST_SPIRIT_CLASSIC_NS;
|
|
|
|
typedef
|
|
scanner<char const*, scanner_policies<skipper_iteration_policy<> > >
|
|
scanner_t;
|
|
|
|
typedef
|
|
rule<scanner_t>
|
|
rule_t;
|
|
|
|
void distinct_parser_test()
|
|
{
|
|
// distinct_parser()
|
|
{
|
|
distinct_parser<> distinct_p;
|
|
|
|
// operator()(CharT const* str) const
|
|
rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword123", r, space_p).full);
|
|
}
|
|
|
|
// distinct_parser(CharT const* letters)
|
|
{
|
|
distinct_parser<> distinct_p("0-9a-zA-Z_");
|
|
|
|
// operator()(CharT const* str) const
|
|
rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword-123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword123", r, space_p).hit);
|
|
}
|
|
|
|
// distinct_parser(parser<TailT> const & tail_)
|
|
{
|
|
distinct_parser<
|
|
char,
|
|
alternative<
|
|
alnum_parser,
|
|
sequence<
|
|
chlit<>,
|
|
negated_char_parser<chlit<> >
|
|
>
|
|
>
|
|
>
|
|
distinct_p(alnum_p | ('-' >> ~ch_p('-')));
|
|
|
|
// operator()(CharT const* str) const
|
|
rule_t r = distinct_p("keyword") >> !str_p("--") >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword--123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword-123", r, space_p).hit);
|
|
}
|
|
}
|
|
|
|
void distinct_directive_test()
|
|
{
|
|
// distinct_directive()
|
|
{
|
|
distinct_directive<> distinct_d;
|
|
|
|
// operator[](CharT const* str) const
|
|
{
|
|
rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword123", r, space_p).full);
|
|
}
|
|
|
|
// operator[](parser<ParserT> const &subject) const
|
|
{
|
|
rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword123", r, space_p).full);
|
|
}
|
|
}
|
|
|
|
// distinct_directive(CharT const* letters)
|
|
{
|
|
distinct_directive<> distinct_d("0-9a-zA-Z_");
|
|
|
|
// operator[](CharT const* str) const
|
|
{
|
|
rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword-123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword123", r, space_p).hit);
|
|
}
|
|
|
|
// operator[](parser<ParserT> const &subject) const
|
|
{
|
|
rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword-123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword123", r, space_p).hit);
|
|
}
|
|
}
|
|
|
|
// distinct_directive(parser<TailT> const & tail_)
|
|
{
|
|
distinct_directive<
|
|
char,
|
|
alternative<
|
|
alnum_parser,
|
|
sequence<
|
|
chlit<>,
|
|
negated_char_parser<chlit<> >
|
|
>
|
|
>
|
|
>
|
|
distinct_d(alnum_p | ('-' >> ~ch_p('-')));
|
|
|
|
// operator[](CharT const* str) const
|
|
{
|
|
rule_t r = distinct_d["keyword"] >> !str_p("--") >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword--123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword-123", r, space_p).hit);
|
|
}
|
|
|
|
// operator[](parser<ParserT> const &subject) const
|
|
{
|
|
rule_t r = distinct_d[str_p("keyword")] >> !str_p("--") >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword--123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword-123", r, space_p).hit);
|
|
}
|
|
}
|
|
}
|
|
|
|
void dynamic_distinct_parser_test()
|
|
{
|
|
// dynamic_distinct_parser()
|
|
{
|
|
dynamic_distinct_parser<scanner_t> distinct_p;
|
|
|
|
// operator()(CharT const* str) const
|
|
rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword123", r, space_p).full);
|
|
}
|
|
|
|
// dynamic_distinct_parser(CharT const* letters)
|
|
{
|
|
dynamic_distinct_parser<scanner_t> distinct_p("0-9a-zA-Z_");
|
|
|
|
// operator()(CharT const* str) const
|
|
rule_t r = distinct_p("keyword") >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword-123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword123", r, space_p).hit);
|
|
}
|
|
|
|
// dynamic_distinct_parser(parser<TailT> const & tail_)
|
|
{
|
|
dynamic_distinct_parser<scanner_t>
|
|
distinct_p(alnum_p | ('-' >> ~ch_p('-')));
|
|
|
|
// operator()(CharT const* str) const
|
|
rule_t r = distinct_p("keyword") >> !str_p("--") >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword--123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword-123", r, space_p).hit);
|
|
}
|
|
}
|
|
|
|
void dynamic_distinct_directive_test()
|
|
{
|
|
// dynamic_distinct_directive()
|
|
{
|
|
dynamic_distinct_directive<scanner_t> distinct_d;
|
|
|
|
// operator[](CharT const* str) const
|
|
{
|
|
rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword123", r, space_p).full);
|
|
}
|
|
|
|
// operator[](parser<ParserT> const &subject) const
|
|
{
|
|
rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword123", r, space_p).full);
|
|
}
|
|
}
|
|
|
|
// dynamic_distinct_directive(CharT const* letters)
|
|
{
|
|
dynamic_distinct_directive<scanner_t> distinct_d("0-9a-zA-Z_");
|
|
|
|
// operator[](CharT const* str) const
|
|
{
|
|
rule_t r = distinct_d["keyword"] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword-123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword123", r, space_p).hit);
|
|
}
|
|
|
|
// operator[](parser<ParserT> const &subject) const
|
|
{
|
|
rule_t r = distinct_d[str_p("keyword")] >> !ch_p('-') >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword-123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword123", r, space_p).hit);
|
|
}
|
|
}
|
|
|
|
// dynamic_distinct_directive(parser<TailT> const & tail_)
|
|
{
|
|
dynamic_distinct_directive<scanner_t>
|
|
distinct_d(alnum_p | ('-' >> ~ch_p('-')));
|
|
|
|
// operator[](CharT const* str) const
|
|
{
|
|
rule_t r = distinct_d["keyword"] >> !str_p("--") >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword--123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword-123", r, space_p).hit);
|
|
}
|
|
|
|
// operator[](parser<ParserT> const &subject) const
|
|
{
|
|
rule_t r = distinct_d[str_p("keyword")] >> !str_p("--") >> int_p;
|
|
BOOST_TEST(parse("keyword 123", r, space_p).full);
|
|
BOOST_TEST(parse("keyword--123", r, space_p).full);
|
|
BOOST_TEST(!parse("keyword-123", r, space_p).hit);
|
|
}
|
|
}
|
|
}
|
|
|
|
int
|
|
main()
|
|
{
|
|
distinct_parser_test();
|
|
distinct_directive_test();
|
|
dynamic_distinct_parser_test();
|
|
dynamic_distinct_directive_test();
|
|
|
|
return boost::report_errors();
|
|
}
|
|
|