/*============================================================================= Copyright (c) 2001-2003 Joel de Guzman Copyright (c) 2003 Hartmut Kaiser http://spirit.sourceforge.net/ Use, modification and distribution is subject to 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) =============================================================================*/ #include #include //#define BOOST_SPIRIT_DEBUG #define BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE #include #include using namespace BOOST_SPIRIT_CLASSIC_NS; ////////////////////////////////////////////////////////////////////////////// // // Grammar tests // /////////////////////////////////////////////////////////////////////////////// struct num_list : public grammar { enum { default_rule = 0, num_rule = 1 }; template struct definition : public grammar_def, same> { definition(num_list const& /*self*/) { num = int_p; r = num >> *(',' >> num); this->start_parsers(r, num); BOOST_SPIRIT_DEBUG_RULE(num); BOOST_SPIRIT_DEBUG_RULE(r); } rule r, num; rule const& start() const { return r; } }; }; struct num_list_ex : public grammar { enum { default_rule = 0, num_rule = 1, integer_rule = 2 }; template struct definition : public grammar_def, same, int_parser > { definition(num_list_ex const& /*self*/) { num = integer; r = num >> *(',' >> num); this->start_parsers(r, num, integer); BOOST_SPIRIT_DEBUG_RULE(num); BOOST_SPIRIT_DEBUG_RULE(r); } rule r, num; int_parser integer; rule const& start() const { return r; } }; }; void grammar_tests() { num_list nlist; BOOST_SPIRIT_DEBUG_GRAMMAR(nlist); parse_info pi; pi = parse("123, 456, 789", nlist, space_p); BOOST_TEST(pi.hit); BOOST_TEST(pi.full); num_list_ex nlistex; BOOST_SPIRIT_DEBUG_GRAMMAR(nlistex); pi = parse("123, 456, 789", nlist.use_parser(), space_p); BOOST_TEST(pi.hit); BOOST_TEST(pi.full); pi = parse("123", nlist.use_parser(), space_p); BOOST_TEST(pi.hit); BOOST_TEST(pi.full); pi = parse("123, 456, 789", nlistex, space_p); BOOST_TEST(pi.hit); BOOST_TEST(pi.full); pi = parse("123, 456, 789", nlistex.use_parser(), space_p); BOOST_TEST(pi.hit); BOOST_TEST(pi.full); pi = parse("123", nlistex.use_parser(), space_p); BOOST_TEST(pi.hit); BOOST_TEST(pi.full); pi = parse("123", nlistex.use_parser(), space_p); BOOST_TEST(pi.hit); BOOST_TEST(pi.full); } /////////////////////////////////////////////////////////////////////////////// // // Main // /////////////////////////////////////////////////////////////////////////////// int main() { grammar_tests(); return boost::report_errors(); }