Boost logo

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