⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 refactoring.ipp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 IPP
📖 第 1 页 / 共 2 页
字号:
        template <typename ParserT, typename ScannerT, typename BinaryT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)        {            return binary.parse(scan);        }    };    template <>    struct refactor_action_non_nested<action_parser_category> {        template <typename ParserT, typename ScannerT, typename BinaryT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &, ScannerT const& scan, BinaryT const& binary)        {            typedef typename BinaryT::parser_generator_t binary_gen_t;            return (                binary_gen_t::generate(                    binary.left().subject(),                    binary.right()                )[binary.left().predicate()]            ).parse(scan);        }    };    ///////////////////////////////////////////////////////////////////////////    template <typename NestedT>    struct refactor_action_type {        template <typename ParserT, typename ScannerT, typename BinaryT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,            NestedT const& nested_d)        {            typedef                typename BinaryT::left_t::parser_category_t                parser_category_t;            return refactor_action_nested<parser_category_t>::                    parse(p, scan, binary, nested_d);        }    };    template <>    struct refactor_action_type<non_nested_refactoring> {        template <typename ParserT, typename ScannerT, typename BinaryT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,            non_nested_refactoring const&)        {            typedef                typename BinaryT::left_t::parser_category_t                parser_category_t;            return refactor_action_non_nested<parser_category_t>::                parse(p, scan, binary);        }    };    template <>    struct refactor_action_type<self_nested_refactoring> {        template <typename ParserT, typename ScannerT, typename BinaryT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &p, ScannerT const& scan, BinaryT const& binary,            self_nested_refactoring const &nested_tag)        {            typedef typename ParserT::parser_generator_t parser_generator_t;            typedef                typename BinaryT::left_t::parser_category_t                parser_category_t;            parser_generator_t nested_d(nested_tag);            return refactor_action_nested<parser_category_t>::                    parse(p, scan, binary, nested_d);        }    };    ///////////////////////////////////////////////////////////////////////////    //    //  refactor the action attached to a binary parser    //    //      The refactoring should be done only if the given parser is an    //      binary_parser_category parser.    //    ///////////////////////////////////////////////////////////////////////////    ///////////////////////////////////////////////////////////////////////////    template <typename CategoryT>    struct attach_action_nested {        template <            typename ParserT, typename ScannerT, typename ActionT,            typename NestedT        >        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &, ScannerT const& scan, ActionT const &action,            NestedT const& nested_d)        {            return action.parse(scan);        }    };    template <>    struct attach_action_nested<binary_parser_category> {        template <            typename ParserT, typename ScannerT, typename ActionT,            typename NestedT        >        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &, ScannerT const& scan, ActionT const &action,            NestedT const& nested_d)        {            typedef                typename ActionT::subject_t::parser_generator_t                binary_gen_t;            return (                binary_gen_t::generate(                    nested_d[action.subject().left()[action.predicate()]],                    nested_d[action.subject().right()[action.predicate()]]                )            ).parse(scan);        }    };    ///////////////////////////////////////////////////////////////////////////    template <typename CategoryT>    struct attach_action_non_nested {        template <typename ParserT, typename ScannerT, typename ActionT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &, ScannerT const& scan, ActionT const &action)        {            return action.parse(scan);        }    };    template <>    struct attach_action_non_nested<binary_parser_category> {        template <typename ParserT, typename ScannerT, typename ActionT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &, ScannerT const& scan, ActionT const &action)        {            typedef                typename ActionT::subject_t::parser_generator_t                binary_gen_t;            return (                binary_gen_t::generate(                    action.subject().left()[action.predicate()],                    action.subject().right()[action.predicate()]                )            ).parse(scan);        }    };    ///////////////////////////////////////////////////////////////////////////    template <typename NestedT>    struct attach_action_type {        template <typename ParserT, typename ScannerT, typename ActionT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &p, ScannerT const& scan, ActionT const& action,            NestedT const& nested_d)        {            typedef                typename ActionT::subject_t::parser_category_t                parser_category_t;            return attach_action_nested<parser_category_t>::                    parse(p, scan, action, nested_d);        }    };    template <>    struct attach_action_type<non_nested_refactoring> {        template <typename ParserT, typename ScannerT, typename ActionT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &p, ScannerT const& scan, ActionT const &action,            non_nested_refactoring const&)        {            typedef                typename ActionT::subject_t::parser_category_t                parser_category_t;            return attach_action_non_nested<parser_category_t>::                parse(p, scan, action);        }    };    template <>    struct attach_action_type<self_nested_refactoring> {        template <typename ParserT, typename ScannerT, typename ActionT>        static typename parser_result<ParserT, ScannerT>::type        parse(ParserT const &p, ScannerT const& scan, ActionT const &action,            self_nested_refactoring const& nested_tag)        {            typedef typename ParserT::parser_generator_t parser_generator_t;            typedef                typename ActionT::subject_t::parser_category_t                parser_category_t;            parser_generator_t nested_d(nested_tag);            return attach_action_nested<parser_category_t>::                    parse(p, scan, action, nested_d);        }    };}   // namespace impl///////////////////////////////////////////////////////////////////////////////BOOST_SPIRIT_CLASSIC_NAMESPACE_END}} // namespace boost::spirit#endif

⌨️ 快捷键说明

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