123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*=============================================================================
- 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_policy
- template<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_scanner
- namespace 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 > 1
- template<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_parser
- struct 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_gen
- struct 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_d
- const 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)
|