|
Boost Users : |
Subject: Re: [Boost-users] [xpressive] questions about semantic actions
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2012-08-05 16:21:04
> >>> 2. Is there a way to access the regex_id of the regex to which a semantic
> >>> action belongs from the semantic action? More generally, can a semantic
> >>> action be written as a custom function object that takes as argument
> >>> some sort of environment (perhaps a match_results<>)?
>
> <snip>
>
> The action does not receive the match_results. The only way to get data
> into and out of an action is the way described in the docs. You will
> have to use xpressive::value, xpressive::reference or
> xpressive::placeholder to hold either the regex_id, a reference to the
> regex_id, or a promise to return a regex_id respectively. You can use
> those within the action.
All of these require providing the regex_id *manually*. For example, with
placeholders, I can do this:
placeholder<regex_id_type> _regex_id;
sregex rx = xpr[cout << _regex_id];
smatch what;
what.let(_regex_id = rx.regex_id()); // need to provide the regex_id here!
regex_match(str, what rx);
What I would like to do is this:
sregex rx = xpr[cout << _regex_id_]; // _regex_id_ is a special symbol
smatch what;
// no need to provide anything here! _regex_id_ will be replaced by the
// regex_id of rx
regex_match(str, what, rx);
The reason this is important is because the action may be attached to a
subregex of the regex on which the match is being done. For example:
placeholder<regex_id_type> _regex_id;
sregex sub = xpr[cout << _regex_id];
sregex rx = sub >> another_xpr;
smatch what;
what.let(_regex_id = ???); // sub.regex_id() needs to go here, but this
// code knows only about rx, not about sub!
regex_match(str, what, rx);
Is there no way to accomplish this?
Thanks,
Nate
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net