|
Boost : |
From: Jon Wray (jwray_at_[hidden])
Date: 2003-03-28 15:59:01
Sorry, I'm refering tree_node<>::value.id().to_long(). The token_node_d
directive in the code below creates these nodes, and stores the
associated rule id in them. The rule id being stored changed when I
upgraded to the latest version of Spirit. Please reread my message
below with this context in mind.
Thanks,
Jon
-----Original Message-----
From: Joel de Guzman [mailto:djowel_at_[hidden]]
Sent: Monday, March 24, 2003 3:58 AM
To: Boost mailing list
Subject: Re: [boost] spirit::rule<>::set_id()
Jon Wray wrote:
> Thanks! I noticed that this change leads to different behavior when
> assigning rules. Consider this code:
>
> typename rule_<ScannerT, IDENTIFIER>::type Identifier;
> typename rule_<ScannerT, FUNCTION>::type Function;
> typename rule_<ScannerT, PREDICATE>::type Predicate;
> typename rule_<ScannerT, VARIABLE>::type Variable;
>
> Identifier = lexeme_d[token_node_d[(alpha_p | '_' | '$') >>
> *(alnum_p
>> '_' | '$')]];
> Function = Identifier;
> Predicate = Identifier;
> Variable = Identifier;
>
> value.id().to_long() used to return FUNCTION, PREDICATE, or VARIABLE,
> but it now returns IDENTIFIER.
[snip]
Huh? AFAICT, Function.id() == FUNCTION, Predicate.id() == PREDICATE and
Variable.id() == VARIABLE.
I tested this...
rule<scanner<>, parser_context, parser_tag<1> > r1;
rule<scanner<>, parser_context, parser_tag<2> > r2;
r1 = r2;
assert(r1.id() == 1);
assert(r2.id() == 2);
What am I missing?
-- 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
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk