c2d982481e
- Minimal example docs
56 lines
1.6 KiB
Plaintext
56 lines
1.6 KiB
Plaintext
[/==============================================================================
|
|
Copyright (C) 2001-2015 Joel de Guzman
|
|
Copyright (C) 2001-2011 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)
|
|
===============================================================================/]
|
|
|
|
[section Number List Redux - list syntax]
|
|
|
|
|
|
So far, we've been using the syntax:
|
|
|
|
double_ >> *(',' >> double_)
|
|
|
|
to parse a comma-delimited list of numbers. Such lists are common in parsing and
|
|
Spirit provides a simpler shortcut for them. The expression above can be
|
|
simplified to:
|
|
|
|
double_ % ','
|
|
|
|
read as: a list of doubles separated by `','`.
|
|
|
|
This sample, again a variation of our previous example, demonstrates just that:
|
|
|
|
template <typename Iterator>
|
|
bool parse_numbers(Iterator first, Iterator last, std::vector<double>& v)
|
|
{
|
|
using x3::double_;
|
|
using x3::phrase_parse;
|
|
using x3::_attr;
|
|
using ascii::space;
|
|
|
|
auto push_back = [&](auto& ctx){ v.push_back(_attr(ctx)); };
|
|
|
|
bool r = phrase_parse(first, last,
|
|
|
|
// Begin grammar
|
|
(
|
|
double_[push_back] % ','
|
|
)
|
|
,
|
|
// End grammar
|
|
|
|
space);
|
|
|
|
if (first != last) // fail if we did not get a full match
|
|
return false;
|
|
return r;
|
|
}
|
|
|
|
The full cpp file for this example can be found here:
|
|
[@../../../example/x3/num_list/num_list3.cpp num_list3.cpp]
|
|
|
|
[endsect]
|