本文整理汇总了C++中spirit_test::test_delimited方法的典型用法代码示例。如果您正苦于以下问题:C++ spirit_test::test_delimited方法的具体用法?C++ spirit_test::test_delimited怎么用?C++ spirit_test::test_delimited使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类spirit_test
的用法示例。
在下文中一共展示了spirit_test::test_delimited方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main()
{
using spirit_test::test;
using spirit_test::test_delimited;
using namespace boost::spirit::ascii;
using namespace boost::spirit::karma::labels;
using boost::spirit::karma::locals;
using boost::spirit::karma::rule;
using boost::spirit::karma::char_;
using boost::spirit::karma::debug;
using boost::spirit::karma::space;
using boost::spirit::karma::eps;
namespace phx = boost::phoenix;
typedef spirit_test::output_iterator<char>::type outiter_type;
{ // basic tests
rule<outiter_type, char()> a, b, c;
rule<outiter_type, std::vector<char>()> start;
std::vector<char> v;
v.push_back('a');
v.push_back('b');
v.push_back('a');
v.push_back('c');
v.push_back('a');
v.push_back('b');
v.push_back('b');
v.push_back('a');
a = char_('a');
b = char_('b');
c = char_('c');
BOOST_SPIRIT_DEBUG_NODE(a);
BOOST_SPIRIT_DEBUG_NODE(b);
BOOST_SPIRIT_DEBUG_NODE(c);
start = *(a | b | c);
BOOST_SPIRIT_DEBUG_NODE(start);
BOOST_TEST(test("abacabba", start, v));
// ignore the delimiter
BOOST_TEST(test_delimited("abacabba ", start, v, space));
std::vector<char> v1;
v1.push_back('b');
v1.push_back('c');
start = (a | b) << c;
BOOST_SPIRIT_DEBUG_NODE(start);
BOOST_TEST(test("bc", start, v1));
}
{ // tests with locals
rule<outiter_type, char()> a, b, c;
rule<outiter_type, std::vector<char>(), locals<int, double> > start;
std::vector<char> v;
v.push_back('a');
v.push_back('b');
v.push_back('a');
v.push_back('c');
v.push_back('a');
v.push_back('b');
v.push_back('b');
v.push_back('a');
a = char_('a');
b = char_('b');
c = char_('c');
BOOST_SPIRIT_DEBUG_NODE(a);
BOOST_SPIRIT_DEBUG_NODE(b);
BOOST_SPIRIT_DEBUG_NODE(c);
start %= eps[_a = 0, _b = 2.0] << *(a[++_a] | b | c);
BOOST_SPIRIT_DEBUG_NODE(start);
BOOST_TEST(test("abacabba", start, v));
}
return boost::report_errors();
}
示例2: main
int main()
{
using spirit_test::test;
using spirit_test::test_delimited;
using boost::spirit::utree;
using boost::spirit::utree_type;
using boost::spirit::utf8_string_range_type;
using boost::spirit::utf8_string_type;
using boost::spirit::utf8_symbol_type;
using boost::spirit::karma::char_;
using boost::spirit::karma::bool_;
using boost::spirit::karma::int_;
using boost::spirit::karma::double_;
using boost::spirit::karma::string;
using boost::spirit::karma::space;
using boost::spirit::karma::rule;
typedef spirit_test::output_iterator<char>::type output_iterator;
// as_string
{
using boost::spirit::karma::digit;
using boost::spirit::karma::as_string;
utree ut("xy");
BOOST_TEST(test("xy", string, ut));
BOOST_TEST(test("xy", as_string[*char_], ut));
BOOST_TEST(test("x,y", as_string[char_ << ',' << char_], ut));
ut.clear();
ut.push_back("ab");
ut.push_back(1.2);
BOOST_TEST(test("ab1.2", as_string[*~digit] << double_, ut));
BOOST_TEST(test("a,b1.2", as_string[~digit % ','] << double_, ut));
}
// as
{
using boost::spirit::karma::digit;
using boost::spirit::karma::as;
typedef as<std::string> as_string_type;
as_string_type const as_string = as_string_type();
typedef as<utf8_symbol_type> as_symbol_type;
as_symbol_type const as_symbol = as_symbol_type();
utree ut("xy");
BOOST_TEST(test("xy", string, ut));
BOOST_TEST(test("xy", as_string[*char_], ut));
BOOST_TEST(test("x,y", as_string[char_ << ',' << char_], ut));
ut.clear();
ut.push_back("ab");
ut.push_back(1.2);
BOOST_TEST(test("ab1.2", as_string[*~digit] << double_, ut));
BOOST_TEST(test("a,b1.2", as_string[~digit % ','] << double_, ut));
ut = utf8_symbol_type("xy");
BOOST_TEST(test("xy", string, ut));
BOOST_TEST(test("xy", as_symbol[*char_], ut));
BOOST_TEST(test("x,y", as_symbol[char_ << ',' << char_], ut));
ut.clear();
ut.push_back(utf8_symbol_type("ab"));
ut.push_back(1.2);
BOOST_TEST(test("ab1.2", as_symbol[*~digit] << double_, ut));
BOOST_TEST(test("a,b1.2", as_symbol[~digit % ','] << double_, ut));
}
// typed basic_string rules
{
utree ut("buzz");
rule<output_iterator, utf8_string_type()> r1 = string;
rule<output_iterator, utf8_symbol_type()> r2 = string;
BOOST_TEST(test("buzz", r1, ut));
ut = utf8_symbol_type("bar");
BOOST_TEST(test("bar", r2, ut));
}
// parameterized karma::string
{
utree ut("foo");
rule<output_iterator, utf8_string_type()> r1 = string("foo");
BOOST_TEST(test("foo", string("foo"), ut));
BOOST_TEST(test("foo", r1, ut));
}
{
using boost::spirit::karma::verbatim;
using boost::spirit::karma::repeat;
using boost::spirit::karma::space;
using boost::spirit::karma::digit;
utree ut;
//.........这里部分代码省略.........
示例3: main
int main()
{
using spirit_test::test;
using spirit_test::test_delimited;
using boost::spirit::utree;
using boost::spirit::utree_type;
using boost::spirit::utf8_string_range_type;
using boost::spirit::utf8_string_type;
using boost::spirit::utf8_symbol_type;
using boost::spirit::karma::char_;
using boost::spirit::karma::bool_;
using boost::spirit::karma::int_;
using boost::spirit::karma::double_;
using boost::spirit::karma::string;
using boost::spirit::karma::space;
using boost::spirit::karma::rule;
typedef spirit_test::output_iterator<char>::type output_iterator;
// kleene star
{
utree ut;
ut.push_back('a');
ut.push_back('b');
BOOST_TEST(test("ab", *char_, ut));
ut.clear();
ut.push_back(123);
ut.push_back(456);
BOOST_TEST(test_delimited("123 456 ", *int_, ut, space));
ut.clear();
ut.push_back(1.23);
ut.push_back(4.56);
BOOST_TEST(test_delimited("1.23 4.56 ", *double_, ut, space));
}
// lists
{
rule<output_iterator, utree()> r1, r1ref;
rule<output_iterator, utf8_string_range_type()> r1str;
rule<output_iterator, utree::const_range()> r1list;
r1 = double_ | int_ | r1str | r1list | r1ref;
r1ref = r1.alias();
r1str = string;
r1list = '(' << -(r1 % ',') << ')';
// ( "abc" "def" )
utree ut;
ut.push_back("abc");
ut.push_back("def");
BOOST_TEST(test("abc,def", string % ',', ut));
BOOST_TEST(test("(abc,def)", r1, ut));
// ( ( "abc" "def" ) )
utree ut1;
ut1.push_back(ut);
BOOST_TEST(test("((abc,def))", r1, ut1));
// rule<output_iterator, std::vector<char>()> r2 = char_ % ',';
// BOOST_TEST(test("abc,def", r2, ut));
// BOOST_TEST(test("abc,def", r2, ut1));
// ( ( "abc" "def" ) ( "abc" "def" ) )
ut1.push_back(ut);
BOOST_TEST(test("(abc,def) (abc,def)", r1 << ' ' << r1, ut1));
// ( 123 456 )
ut.clear();
ut.push_back(123);
ut.push_back(456);
BOOST_TEST(test("123,456", int_ % ',', ut));
BOOST_TEST(test("(123,456)", r1, ut));
// ( ( 123 456 ) )
ut1.clear();
ut1.push_back(ut);
BOOST_TEST(test("((123,456))", r1, ut1));
// rule<output_iterator, std::vector<int>()> r4 = int_ % ',';
// BOOST_TEST(test("123,456", r4, ut));
// BOOST_TEST(test("123,456", r4, ut1));
// ( ( 123 456 ) ( 123 456 ) )
ut1.push_back(ut);
BOOST_TEST(test("(123,456) (123,456)", r1 << ' ' << r1, ut1));
// ( 1.23 4.56 )
ut.clear();
ut.push_back(1.23);
ut.push_back(4.56);
BOOST_TEST(test("1.23,4.56", double_ % ',', ut));
BOOST_TEST(test("(1.23,4.56)", r1, ut));
// ( ( 1.23 4.56 ) )
//.........这里部分代码省略.........
示例4: main
int main()
{
using spirit_test::test;
using spirit_test::test_delimited;
using boost::spirit::utree;
using boost::spirit::utree_type;
using boost::spirit::utf8_string_range_type;
using boost::spirit::utf8_string_type;
using boost::spirit::utf8_symbol_type;
using boost::spirit::karma::char_;
using boost::spirit::karma::bool_;
using boost::spirit::karma::int_;
using boost::spirit::karma::double_;
using boost::spirit::karma::string;
using boost::spirit::karma::space;
using boost::spirit::karma::rule;
typedef spirit_test::output_iterator<char>::type output_iterator;
// primitive data types
{
utree ut('x');
BOOST_TEST(test("x", char_, ut));
ut = false;
BOOST_TEST(test("false", bool_, ut));
ut = 123;
BOOST_TEST(test("123", int_, ut));
ut = 123.45;
BOOST_TEST(test("123.45", double_, ut));
ut = "abc";
BOOST_TEST(test("abc", string, ut));
ut = utf8_symbol_type("xyz");
BOOST_TEST(test("xyz", string, ut));
}
// sequences
{
using boost::spirit::karma::digit;
using boost::spirit::karma::repeat;
utree ut;
ut.push_back('x');
ut.push_back('y');
BOOST_TEST(test("xy", char_ << char_, ut));
ut.clear();
ut.push_back(123);
ut.push_back(456);
BOOST_TEST(test_delimited("123 456 ", int_ << int_, ut, space));
ut.clear();
ut.push_back(1.23);
ut.push_back(4.56);
BOOST_TEST(test_delimited("1.23 4.56 ", double_ << double_, ut, space));
ut.clear();
ut.push_back(1.23);
ut.push_back("ab");
BOOST_TEST(test("1.23ab", double_ << string, ut));
ut.clear();
rule<output_iterator, double()> r1 = double_;
rule<output_iterator, utree()> r2 = double_;
// ( 1.23 "a" "b" )
ut.push_back(1.23);
ut.push_back('a');
ut.push_back('b');
BOOST_TEST(test("1.23ab", double_ << *char_, ut));
BOOST_TEST(test("1.23ab", r1 << *char_, ut));
BOOST_TEST(test("1.23ab", r2 << *char_, ut));
// ( ( 1.23 ) "a" "b" )
ut.clear();
utree ut1;
ut1.push_back(1.23);
ut.push_back(ut1);
ut.push_back('a');
ut.push_back('b');
BOOST_TEST(test("1.23ab", r1 << *char_, ut));
BOOST_TEST(test("1.23ab", r2 << *char_, ut));
// ( "a" "b" 1.23 )
ut.clear();
ut.push_back('a');
ut.push_back('b');
ut.push_back(1.23);
BOOST_TEST(test("ab1.23", repeat(2)[~digit] << double_, ut));
BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r1, ut));
BOOST_TEST(test("ab1.23", repeat(2)[~digit] << r2, ut));
// ( "a" "b" ( 1.23 ) )
ut.clear();
//.........这里部分代码省略.........