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
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/spirit-devel

I already cross-posted this there.

Regards,
-- 
Joel de Guzman
joel at boost-consulting.com
http://www.boost-consulting.com
http://spirit.sf.net

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to