Chris@16: /*============================================================================= Chris@16: Copyright (c) 2001-2003 Joel de Guzman Chris@16: http://spirit.sourceforge.net/ Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: #ifndef BOOST_SPIRIT_PARAMETRIC_HPP Chris@16: #define BOOST_SPIRIT_PARAMETRIC_HPP Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace spirit { Chris@16: Chris@16: BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // f_chlit class [ functional version of chlit ] Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct f_chlit : public char_parser > Chris@16: { Chris@16: f_chlit(ChGenT chgen_) Chris@16: : chgen(chgen_) {} Chris@16: Chris@16: template Chris@16: bool test(T ch) const Chris@16: { return ch == chgen(); } Chris@16: Chris@16: ChGenT chgen; Chris@16: }; Chris@16: Chris@16: template Chris@16: inline f_chlit Chris@16: f_ch_p(ChGenT chgen) Chris@16: { return f_chlit(chgen); } Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // f_range class [ functional version of range ] Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct f_range : public char_parser > Chris@16: { Chris@16: f_range(ChGenAT first_, ChGenBT last_) Chris@16: : first(first_), last(last_) Chris@16: {} Chris@16: Chris@16: template Chris@16: bool test(T ch) const Chris@16: { Chris@16: BOOST_SPIRIT_ASSERT(first() <= last()); Chris@16: return (ch >= first()) && (ch <= last()); Chris@16: } Chris@16: Chris@16: ChGenAT first; Chris@16: ChGenBT last; Chris@16: }; Chris@16: Chris@16: template Chris@16: inline f_range Chris@16: f_range_p(ChGenAT first, ChGenBT last) Chris@16: { return f_range(first, last); } Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // f_chseq class [ functional version of chseq ] Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: class f_chseq : public parser > Chris@16: { Chris@16: public: Chris@16: Chris@16: typedef f_chseq self_t; Chris@16: Chris@16: f_chseq(IterGenAT first_, IterGenBT last_) Chris@16: : first(first_), last(last_) {} Chris@16: Chris@16: template Chris@16: typename parser_result::type Chris@16: parse(ScannerT const& scan) const Chris@16: { Chris@16: typedef typename parser_result::type result_t; Chris@16: return impl::string_parser_parse(first(), last(), scan); Chris@16: } Chris@16: Chris@16: private: Chris@16: Chris@16: IterGenAT first; Chris@16: IterGenBT last; Chris@16: }; Chris@16: Chris@16: template Chris@16: inline f_chseq Chris@16: f_chseq_p(IterGenAT first, IterGenBT last) Chris@16: { return f_chseq(first, last); } Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // f_strlit class [ functional version of strlit ] Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: class f_strlit : public parser > Chris@16: { Chris@16: public: Chris@16: Chris@16: typedef f_strlit self_t; Chris@16: Chris@16: f_strlit(IterGenAT first, IterGenBT last) Chris@16: : seq(first, last) {} Chris@16: Chris@16: template Chris@16: typename parser_result::type Chris@16: parse(ScannerT const& scan) const Chris@16: { Chris@16: typedef typename parser_result::type result_t; Chris@16: return impl::contiguous_parser_parse Chris@16: (seq, scan, scan); Chris@16: } Chris@16: Chris@16: private: Chris@16: Chris@16: f_chseq seq; Chris@16: }; Chris@16: Chris@16: template Chris@16: inline f_strlit Chris@16: f_str_p(IterGenAT first, IterGenBT last) Chris@16: { return f_strlit(first, last); } Chris@16: Chris@16: BOOST_SPIRIT_CLASSIC_NAMESPACE_END Chris@16: Chris@16: }} // namespace BOOST_SPIRIT_CLASSIC_NS Chris@16: Chris@16: #endif