Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost.Spirit Karma: Alternative generator
From: Matwey V. Kornilov (matwey.kornilov_at_[hidden])
Date: 2016-03-03 04:05:44

01.03.2016 17:51, Hartmut Kaiser пишет:
>> I am construction karma::rule<OutputIterator, std::string()> which I
>> would like to be either a string or quoted string if the string contains
>> spaces.
>> Now I think that the rule should be something like:
>> rule = (&true[...] << string) | (lit("\"") << string << lit("\""));
>> but I've failed to write proper semantic action. How could I obtain
>> std::string object reference to write something like:
>> (obj.find(" ") == std::string::npos)
>> ? Or maybe is there a better way to do the same?
> Please keep in mind that semantic actions are executed 'lazily'. That means
> that you need to use a function object which executes the semantic code in
> its operator()(). The easiest way is to use phoenix::function for that.
> Please see the corresponding documentation.

Could this be implemented using char_ like the following?

rule = (repeat[~char_(' ')]) | (lit("\"") << string << lit("\""));

The documentation says about repeat[a] that:
"This generator succeeds as long as its embedded generator a does not fail"
Unfortunately, I've failed to make first term (repeat[...]) fail on spaces.

> Regards Hartmut
> ---------------

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at