no_actions.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 166 行

HPP
166
字号
/*=============================================================================    Copyright (c) 1998-2003 Joel de Guzman    Copyright (c) 2003 Vaclav Vesely    http://spirit.sourceforge.net/  Distributed under 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)=============================================================================*/#if !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)#define BOOST_SPIRIT_NO_ACTIONS_HPP#include <boost/spirit/home/classic/core/parser.hpp>#include <boost/spirit/home/classic/core/composite/composite.hpp>#include <boost/spirit/home/classic/core/non_terminal/rule.hpp>namespace boost {namespace spirit {BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN//-----------------------------------------------------------------------------// no_actions_action_policytemplate<typename BaseT = action_policy>struct no_actions_action_policy:    public BaseT{    typedef BaseT base_t;    no_actions_action_policy():        BaseT()    {}    template<typename PolicyT>    no_actions_action_policy(PolicyT const& other):        BaseT(other)    {}    template<typename ActorT, typename AttrT, typename IteratorT>    void    do_action(        ActorT const&       actor,        AttrT&              val,        IteratorT const&    first,        IteratorT const&    last) const    {}};//-----------------------------------------------------------------------------// no_actions_scannernamespace detail{    template <typename ActionPolicy>    struct compute_no_actions_action_policy    {        typedef no_actions_action_policy<ActionPolicy> type;    };    template <typename ActionPolicy>    struct compute_no_actions_action_policy<no_actions_action_policy<ActionPolicy> >    {        typedef no_actions_action_policy<ActionPolicy> type;    };}template<typename ScannerT = scanner<> >struct no_actions_scanner{    typedef scanner_policies<        typename ScannerT::iteration_policy_t,        typename ScannerT::match_policy_t,        typename detail::compute_no_actions_action_policy<typename ScannerT::action_policy_t>::type    > policies_t;    typedef typename        rebind_scanner_policies<ScannerT, policies_t>::type type;};#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1template<typename ScannerT = scanner<> >struct no_actions_scanner_list{    typedef        scanner_list<            ScannerT,            typename no_actions_scanner<ScannerT>::type        >            type;};#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1//-----------------------------------------------------------------------------// no_actions_parserstruct no_actions_parser_gen;template<typename ParserT>struct no_actions_parser:    public unary<ParserT, parser<no_actions_parser<ParserT> > >{    typedef no_actions_parser<ParserT>      self_t;    typedef unary_parser_category           parser_category_t;    typedef no_actions_parser_gen           parser_generator_t;    typedef unary<ParserT, parser<self_t> > base_t;    template<typename ScannerT>    struct result    {        typedef typename parser_result<ParserT, ScannerT>::type type;    };    no_actions_parser(ParserT const& p)    :   base_t(p)    {}    template<typename ScannerT>    typename result<ScannerT>::type    parse(ScannerT const& scan) const    {        typedef typename no_actions_scanner<ScannerT>::policies_t policies_t;        return this->subject().parse(scan.change_policies(policies_t(scan)));    }};//-----------------------------------------------------------------------------// no_actions_parser_genstruct no_actions_parser_gen{    template<typename ParserT>    struct result    {        typedef no_actions_parser<ParserT> type;    };    template<typename ParserT>    static no_actions_parser<ParserT>    generate(parser<ParserT> const& subject)    {        return no_actions_parser<ParserT>(subject.derived());    }    template<typename ParserT>    no_actions_parser<ParserT>    operator[](parser<ParserT> const& subject) const    {        return no_actions_parser<ParserT>(subject.derived());    }};//-----------------------------------------------------------------------------// no_actions_dconst no_actions_parser_gen no_actions_d = no_actions_parser_gen();//-----------------------------------------------------------------------------BOOST_SPIRIT_CLASSIC_NAMESPACE_END} // namespace spirit} // namespace boost#endif // !defined(BOOST_SPIRIT_NO_ACTIONS_HPP)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?