// // Copyright (c) 2004 Joao Abecasis // // 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 using namespace boost::spirit; void shortest_alternative_parser_test() { typedef shortest_alternative< shortest_alternative< shortest_alternative< strlit<>, strlit<> >, strlit<> >, strlit<> > parser_t; parser_t short_rule = shortest_d[ str_p("a") | str_p("aa") | str_p("aaa") | str_p("aaaa") ]; BOOST_TEST(parse("a", short_rule).full); BOOST_TEST(parse("aa", short_rule).length == 1); BOOST_TEST(parse("aaa", short_rule).length == 1); BOOST_TEST(parse("aaaa", short_rule).length == 1); short_rule = shortest_d[ str_p("d") | str_p("cd") | str_p("bcd") | str_p("abcd") ]; BOOST_TEST(parse("d", short_rule).full); BOOST_TEST(parse("cd", short_rule).full); BOOST_TEST(parse("bcd", short_rule).full); BOOST_TEST(parse("abcd", short_rule).full); } int main() { shortest_alternative_parser_test(); return boost::report_errors(); }