kleene.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 115 行

CPP
115
字号
//  Copyright (c) 2001-2008 Hartmut Kaiser// //  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 <boost/config/warning_disable.hpp>#include <boost/detail/lightweight_test.hpp>#include <boost/assign/std/vector.hpp>#include <boost/spirit/include/support_argument.hpp>// #include <boost/spirit/include/support_pack.hpp>#include <boost/spirit/include/karma_char.hpp>#include <boost/spirit/include/karma_string.hpp>#include <boost/spirit/include/karma_numeric.hpp>#include <boost/spirit/include/karma_generate.hpp>#include <boost/spirit/include/karma_operator.hpp>#include <boost/spirit/include/karma_action.hpp>#include <boost/fusion/include/vector.hpp>#include <boost/spirit/include/support_unused.hpp>#include <boost/spirit/include/phoenix_core.hpp>#include <boost/spirit/include/phoenix_operator.hpp>#include <boost/spirit/include/phoenix_statement.hpp>#include "test.hpp"using namespace spirit_test;///////////////////////////////////////////////////////////////////////////////int main(){    using namespace boost::spirit;    namespace fusion = boost::fusion;        {        using namespace boost::assign;        std::vector<char> v;        v += 'a', 'b', 'c';        BOOST_TEST(test("abc", *char_, v));        BOOST_TEST(test_delimited("a b c ", *char_, v, ' '));    }        {        using namespace boost::assign;        std::vector<char> v;                // these need to fail, because the return value should be false        BOOST_TEST(!test("", +char_, v));        BOOST_TEST(!test_delimited("", +char_, v, ' '));                v += 'a', 'b', 'c';        BOOST_TEST(test("abc", +char_, v));        BOOST_TEST(test_delimited("a b c ", +char_, v, ' '));    }        {        using namespace boost::assign;        using namespace boost::phoenix;        using namespace boost::spirit::arg_names;                std::vector<int> v;        v += 10, 20, 30;        BOOST_TEST(test("102030", *int_, v));        BOOST_TEST(test_delimited("10, 20, 30, ", *int_, v, lit(", ")));        typedef fusion::vector<int> fvec;        std::vector<fvec> sv;        sv += fvec(10), fvec(20), fvec(30);        BOOST_TEST(test("10,20,30,", *(int_ << ','), sv));        BOOST_TEST(test_delimited("10 , 20 , 30 , ", *(int_ << ','), sv, lit(" ")));         fusion::vector<char, char> cc ('a', 'c');        BOOST_TEST(test("ac", char_ << *(char_(' ') << ',') << char_, cc));        BOOST_TEST(test_delimited("a c ",             char_ << *(char_(' ') << ',') << char_, cc, " "));    }        {        using namespace boost::assign;        using namespace boost::phoenix;        using namespace boost::spirit::arg_names;                std::vector<int> v;        BOOST_TEST(!test("", +int_, v));        BOOST_TEST(!test_delimited("", +int_, v, lit(", ")));        v += 10, 20, 30;        BOOST_TEST(test("102030", +int_, v));        BOOST_TEST(test_delimited("10, 20, 30, ", +int_, v, lit(", ")));        typedef fusion::vector<int> fvec;        std::vector<fvec> sv;        sv += fvec(10), fvec(20), fvec(30);        BOOST_TEST(test("10,20,30,", +(int_ << ','), sv));        BOOST_TEST(test_delimited("10 , 20 , 30 , ", +(int_ << ','), sv, lit(" ")));        fusion::vector<char, char> cc ('a', 'c');        BOOST_TEST(!test("", char_ << +(char_(' ') << ',') << char_, cc));        BOOST_TEST(!test_delimited("",             char_ << +(char_(' ') << ',') << char_, cc, " "));    }    return boost::report_errors();}

⌨️ 快捷键说明

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