// Copyright (c) 2001-2010 Hartmut Kaiser // Copyright (c) 2010 Head Geek // // 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) #include #include #include namespace qi = boost::spirit::qi; using qi::omit; using qi::repeat; using std::cout; using std::endl; typedef qi::rule strrule_type; void test(const std::string input, strrule_type rule, std::string result) { std::string target; std::string::const_iterator i = input.begin(), ie = input.end(); BOOST_TEST(qi::parse(i, ie, rule, target) && target == result); } int main() { strrule_type obsolete_year = omit[-qi::char_(" \t")] >> repeat(2)[qi::digit] >> omit[-qi::char_(" \t")]; strrule_type correct_year = repeat(4)[qi::digit]; test("1776", qi::hold[correct_year] | repeat(2)[qi::digit], "1776"); test("76", obsolete_year, "76"); test("76", qi::hold[obsolete_year] | correct_year, "76"); test(" 76", qi::hold[correct_year] | obsolete_year, "76"); test("76", qi::hold[correct_year] | obsolete_year, "76"); test("76", qi::hold[correct_year] | repeat(2)[qi::digit], "76"); return boost::report_errors(); }