• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //  Copyright (c) 2001-2010 Hartmut Kaiser
2 //  Copyright (c) 2010 Head Geek
3 //
4 //  Distributed under the Boost Software License, Version 1.0. (See accompanying
5 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 
7 #include <iostream>
8 #include <boost/detail/lightweight_test.hpp>
9 #include <boost/spirit/include/qi.hpp>
10 
11 namespace qi = boost::spirit::qi;
12 using qi::omit;
13 using qi::repeat;
14 using std::cout;
15 using std::endl;
16 
17 typedef qi::rule<std::string::const_iterator, std::string()> strrule_type;
18 
test(const std::string input,strrule_type rule,std::string result)19 void test(const std::string input, strrule_type rule, std::string result)
20 {
21     std::string target;
22     std::string::const_iterator i = input.begin(), ie = input.end();
23 
24     BOOST_TEST(qi::parse(i, ie, rule, target) && target == result);
25 }
26 
main()27 int main()
28 {
29     strrule_type obsolete_year =
30         omit[-qi::char_(" \t")] >>
31         repeat(2)[qi::digit] >>
32         omit[-qi::char_(" \t")];
33     strrule_type correct_year = repeat(4)[qi::digit];
34 
35     test("1776", qi::hold[correct_year] | repeat(2)[qi::digit], "1776");
36     test("76",   obsolete_year, "76");
37     test("76",   qi::hold[obsolete_year] | correct_year, "76");
38     test(" 76",  qi::hold[correct_year] | obsolete_year, "76");
39     test("76",   qi::hold[correct_year] | obsolete_year, "76");
40     test("76",   qi::hold[correct_year] | repeat(2)[qi::digit], "76");
41 
42     return boost::report_errors();
43 }
44 
45