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

📄 rule.ipp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 IPP
📖 第 1 页 / 共 2 页
字号:
        ///////////////////////////////////////////////////////////////////////        template <typename ScannerT, typename AttrT>        struct abstract_parser        {            abstract_parser() {}            virtual ~abstract_parser() {}            virtual typename match_result<ScannerT, AttrT>::type            do_parse_virtual(ScannerT const& scan) const = 0;            virtual abstract_parser*            clone() const = 0;        };        ///////////////////////////////////////////////////////////////////////        //        //  concrete_parser class        //        ///////////////////////////////////////////////////////////////////////        template <typename ParserT, typename ScannerT, typename AttrT>        struct concrete_parser : abstract_parser<ScannerT, AttrT>        {            concrete_parser(ParserT const& p) : p(p) {}            virtual ~concrete_parser() {}            virtual typename match_result<ScannerT, AttrT>::type            do_parse_virtual(ScannerT const& scan) const            {                return p.parse(scan);            }            virtual abstract_parser<ScannerT, AttrT>*            clone() const            {                return new concrete_parser(p);            }            typename ParserT::embed_t p;        };#if BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1        ///////////////////////////////////////////////////////////////////////        //        //  This generates partial specializations for the class        //        //          abstract_parser        //        //  with an increasing number of different ScannerT template parameters        //  and corresponding do_parse_virtual function declarations for each        //  of the different required scanner types:        //        //      template <typename ScannerT0, ..., typename AttrT>        //      struct abstract_parser<scanner_list<ScannerT0, ...>, AttrT>        //      {        //          abstract_parser() {}        //          virtual ~abstract_parser() {}        //        //          virtual typename match_result<ScannerT0, AttrT>::type        //          do_parse_virtual(ScannerT0 const &scan) const = 0;        //        //          virtual abstract_parser*        //          clone() const = 0;        //        //          ...        //      };        //        ///////////////////////////////////////////////////////////////////////        #define BOOST_SPIRIT_RULE_ENUM_DOPARSE_A(z, N, _)                       \                virtual typename match_result<                                  \                    BOOST_PP_CAT(ScannerT, N), AttrT                            \                >::type                                                         \                do_parse_virtual(                                               \                    BOOST_PP_CAT(ScannerT, N) const& scan) const = 0;           \        #define BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS(z, N, _)                     \            template <                                                          \                BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ScannerT),  \                typename AttrT                                                  \            >                                                                   \            struct abstract_parser<                                             \                scanner_list<                                                   \                    BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)        \                >,                                                              \                AttrT                                                           \            >                                                                   \            {                                                                   \                abstract_parser() {}                                            \                virtual ~abstract_parser() {}                                   \                                                                                \                BOOST_PP_REPEAT_ ## z(                                          \                    BOOST_PP_INC(N), BOOST_SPIRIT_RULE_ENUM_DOPARSE_A, _)       \                                                                                \                virtual abstract_parser*                                        \                clone() const = 0;                                              \            };                                                                  \        BOOST_PP_REPEAT_FROM_TO(1, BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,            BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS, _)        #undef BOOST_SPIRIT_RULE_ENUM_DOPARSE_A        #undef BOOST_SPIRIT_ENUM_ABSTRACT_PARSERS        ///////////////////////////////////////////////////////////////////////        ///////////////////////////////////////////////////////////////////////        //        //  This generates partial specializations for the class        //        //          concrete_parser        //        //  with an increasing number of different ScannerT template parameters        //  and corresponding do_parse_virtual function declarations for each        //  of the different required scanner types:        //        //      template <        //          typename ParserT, typename ScannerT0, ..., typename AttrT        //      >        //      struct concrete_parser<        //          ParserT, scanner_list<ScannerT0, ...>, AttrT        //      >        //      :   public abstract_parser<scanner_list<ScannerT0, ...>, AttrT>        //      {        //          concrete_parser(ParserT const& p_) : p(p_) {}        //          virtual ~concrete_parser() {}        //        //          virtual typename match_result<ScannerT0, AttrT>::type        //          do_parse_virtual(ScannerT0 const &scan) const        //          { return p.parse(scan); }        //        //          virtual abstract_parser<scanner_list<ScannerT0, ...>, AttrT>*        //          clone() const        //          {        //              return new concrete_parser(p);        //          }        //        //          ...        //        //          typename ParserT::embed_t p;        //      };        //        ///////////////////////////////////////////////////////////////////////        #define BOOST_SPIRIT_RULE_ENUM_DOPARSE_C(z, N, _)                       \                virtual typename match_result<                                  \                    BOOST_PP_CAT(ScannerT, N), AttrT                            \                >::type                                                         \                do_parse_virtual(                                               \                    BOOST_PP_CAT(ScannerT, N) const& scan) const                \                { return p.parse(scan); }                                       \        #define BOOST_SPIRIT_ENUM_CONCRETE_PARSERS(z, N, _)                     \            template <                                                          \                typename ParserT,                                               \                BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), typename ScannerT),  \                typename AttrT                                                  \            >                                                                   \            struct concrete_parser<                                             \                ParserT,                                                        \                scanner_list<                                                   \                    BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)        \                >,                                                              \                AttrT                                                           \            >                                                                   \            :   abstract_parser<                                                \                    scanner_list<                                               \                        BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)    \                    >,                                                          \                    AttrT                                                       \                >                                                               \            {                                                                   \                concrete_parser(ParserT const& p_) : p(p_) {}                   \                virtual ~concrete_parser() {}                                   \                                                                                \                BOOST_PP_REPEAT_ ## z(                                          \                    BOOST_PP_INC(N), BOOST_SPIRIT_RULE_ENUM_DOPARSE_C, _)       \                                                                                \                virtual abstract_parser<                                        \                    scanner_list<                                               \                        BOOST_PP_ENUM_PARAMS_Z(z, BOOST_PP_INC(N), ScannerT)    \                    >,                                                          \                    AttrT                                                       \                >*                                                              \                clone() const                                                   \                {                                                               \                    return new concrete_parser(p);                              \                }                                                               \                                                                                \                typename ParserT::embed_t p;                                    \            };                                                                  \        BOOST_PP_REPEAT_FROM_TO(1, BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT,            BOOST_SPIRIT_ENUM_CONCRETE_PARSERS, _)        #undef BOOST_SPIRIT_ENUM_CONCRETE_PARSERS        #undef BOOST_SPIRIT_RULE_ENUM_DOPARSE_C        ///////////////////////////////////////////////////////////////////////#endif // BOOST_SPIRIT_RULE_SCANNERTYPE_LIMIT > 1    } // namespace implBOOST_SPIRIT_CLASSIC_NAMESPACE_END}} // namespace boost::spirit#endif

⌨️ 快捷键说明

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