Chris@16: /*============================================================================= Chris@16: Copyright (c) 2003 Joel de Guzman Chris@16: Copyright (c) 2003 Vaclav Vesely 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_LAZY_HPP Chris@16: #define BOOST_SPIRIT_LAZY_HPP Chris@16: Chris@16: //////////////////////////////////////////////////////////////////////////////// Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: //////////////////////////////////////////////////////////////////////////////// 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: // lazy_parser, holds phoenix actor which returns a spirit parser. Chris@16: // Chris@16: //////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: template Chris@16: struct lazy_parser : parser > Chris@16: { Chris@16: typedef lazy_parser self_t; Chris@16: typedef typename ::phoenix::actor_result< Chris@16: ActorT, ::phoenix::tuple<> >::plain_type actor_result_t; Chris@16: Chris@16: template Chris@16: struct result Chris@16: { Chris@16: typedef typename Chris@16: parser_result::type Chris@16: type; Chris@16: }; Chris@16: Chris@16: lazy_parser(ActorT const& actor_) Chris@16: : actor(actor_) {} Chris@16: Chris@16: template Chris@16: typename parser_result::type Chris@16: parse(ScannerT const& scan) const Chris@16: { return actor().parse(scan); } Chris@16: Chris@16: ActorT actor; Chris@16: }; Chris@16: Chris@16: ////////////////////////////// Chris@16: // lazy_p, returns lazy_parser Chris@16: // Usage: lazy_p(actor) Chris@16: template Chris@16: lazy_parser lazy_p(ActorT const& actor) Chris@16: { return lazy_parser(actor); } Chris@16: Chris@16: BOOST_SPIRIT_CLASSIC_NAMESPACE_END Chris@16: Chris@16: }} // namespace BOOST_SPIRIT_CLASSIC_NS Chris@16: Chris@16: #endif // BOOST_SPIRIT_LAZY_HPP