Boost logo

Boost :

From: Joel de Guzman (djowel_at_[hidden])
Date: 2003-03-26 09:32:55

Dave Gomboc wrote:
> When I define rules x, y, and z such that
> x = ch_p('a');
> y = ch_p('a');
> z = !x >> y;
> it appears to operate the same as if z were defined to be
> z = (ch_p('a') | epsilon_p) >> 'a';
> which accepts "aa", but rejects "a".
> On the other hand, if I define z as
> z = (epsilon_p | ch_p('a')) >> 'a'
> then "a" is accepted, but "aa" is rejected.
> (These are, of course, not the actual rules I am interested in, but a
> vast simplification of them, focusing on the point of interest.)
> My original expectation had been that first the choice on the left
> side of the or operation would be attempted, but when ultimately
> failing to match
> the entire string later on, to then backtrack and attempt matching
> via the choice on the right side of the or. How can I achieve this
> behaviour?

I am not quiet sure what you mean. AFAICT, given "aa" or "a",
both (ch_p('a') | epsilon_p) and (epsilon_p | ch_p('a')) does not
fail. What do you mean by "failing to match" above?

> In the real problem the semantic actions associated with x and y are
> different, but the inputs they match individually have significant
> overlap, and where they do overlap, I need y to be matched rather
> than x.

Perhaps I can answer this after your first question is clarified.

> On a related note, when I defined BOOST_SPIRIT_DEBUG before
> #including the core, and specified BOOST_SPIRIT_DEBUG_RULE(test); in
> my grammar I
> received the following error message using g++-3.2.2 on linux-i686:
> test_grammar.hpp:45: ISO C++ forbits declaration of
> `get_node_registry'
> with no type
> test_grammar.hpp:45: invalid use of `::'
> test_grammar.hpp:45: syntax error before `.' token
> Any idea what I might be doing wrong?

Not sure. Can I peek into your test_grammar.hpp?

> Also, please let me know if I should be asking this on a
> spriit-specific
> list rather than boost's.

Spirit-devel mailing list

I already cross-posted this there.


Joel de Guzman
joel at

Boost list run by bdawes at, gregod at, cpdaniel at, john at