1 /*=============================================================================
2 Copyright (c) 1998-2003 Joel de Guzman
3 Copyright (c) 2001 Daniel Nuffer
4 Copyright (c) 2002 Hartmut Kaiser
5 http://spirit.sourceforge.net/
7 Use, modification and distribution is subject to the Boost Software
8 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9 http://www.boost.org/LICENSE_1_0.txt)
10 =============================================================================*/
11 #if !defined(BOOST_SPIRIT_LIST_IPP)
12 #define BOOST_SPIRIT_LIST_IPP
14 namespace boost { namespace spirit {
16 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
18 ///////////////////////////////////////////////////////////////////////////
20 // operator% is defined as:
21 // a % b ---> a >> *(b >> a)
23 ///////////////////////////////////////////////////////////////////////////
24 template <typename A, typename B>
25 inline sequence<A, kleene_star<sequence<B, A> > >
26 operator%(parser<A> const& a, parser<B> const& b)
28 return a.derived() >> *(b.derived() >> a.derived());
32 inline sequence<A, kleene_star<sequence<chlit<char>, A> > >
33 operator%(parser<A> const& a, char b)
35 return a.derived() >> *(b >> a.derived());
39 inline sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > >
40 operator%(char a, parser<B> const& b)
42 return a >> *(b.derived() >> a);
46 inline sequence<A, kleene_star<sequence<strlit<char const*>, A> > >
47 operator%(parser<A> const& a, char const* b)
49 return a.derived() >> *(b >> a.derived());
53 inline sequence<strlit<char const*>,
54 kleene_star<sequence<B, strlit<char const*> > > >
55 operator%(char const* a, parser<B> const& b)
57 return a >> *(b.derived() >> a);
61 inline sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > >
62 operator%(parser<A> const& a, wchar_t b)
64 return a.derived() >> *(b >> a.derived());
68 inline sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > >
69 operator%(wchar_t a, parser<B> const& b)
71 return a >> *(b.derived() >> a);
75 inline sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > >
76 operator%(parser<A> const& a, wchar_t const* b)
78 return a.derived() >> *(b >> a.derived());
82 inline sequence<strlit<wchar_t const*>,
83 kleene_star<sequence<B, strlit<wchar_t const*> > > >
84 operator%(wchar_t const* a, parser<B> const& b)
86 return a >> *(b.derived() >> a);
89 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
91 }} // namespace boost::spirit