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/ 6 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 13 14namespace boost { namespace spirit { 15 16BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN 17 18 /////////////////////////////////////////////////////////////////////////// 19 // 20 // operator% is defined as: 21 // a % b ---> a >> *(b >> a) 22 // 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) 27 { 28 return a.derived() >> *(b.derived() >> a.derived()); 29 } 30 31 template <typename A> 32 inline sequence<A, kleene_star<sequence<chlit<char>, A> > > 33 operator%(parser<A> const& a, char b) 34 { 35 return a.derived() >> *(b >> a.derived()); 36 } 37 38 template <typename B> 39 inline sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > > 40 operator%(char a, parser<B> const& b) 41 { 42 return a >> *(b.derived() >> a); 43 } 44 45 template <typename A> 46 inline sequence<A, kleene_star<sequence<strlit<char const*>, A> > > 47 operator%(parser<A> const& a, char const* b) 48 { 49 return a.derived() >> *(b >> a.derived()); 50 } 51 52 template <typename B> 53 inline sequence<strlit<char const*>, 54 kleene_star<sequence<B, strlit<char const*> > > > 55 operator%(char const* a, parser<B> const& b) 56 { 57 return a >> *(b.derived() >> a); 58 } 59 60 template <typename A> 61 inline sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > > 62 operator%(parser<A> const& a, wchar_t b) 63 { 64 return a.derived() >> *(b >> a.derived()); 65 } 66 67 template <typename B> 68 inline sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > > 69 operator%(wchar_t a, parser<B> const& b) 70 { 71 return a >> *(b.derived() >> a); 72 } 73 74 template <typename A> 75 inline sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > > 76 operator%(parser<A> const& a, wchar_t const* b) 77 { 78 return a.derived() >> *(b >> a.derived()); 79 } 80 81 template <typename B> 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) 85 { 86 return a >> *(b.derived() >> a); 87 } 88 89BOOST_SPIRIT_CLASSIC_NAMESPACE_END 90 91}} // namespace boost::spirit 92 93#endif 94