Boost logo

Boost Users :

Subject: Re: [Boost-users] Parsing math expression
From: Eloi Du Bois (eloi.du.bois_at_[hidden])
Date: 2010-11-30 09:28:08


Sorry, but I meant that it has to compute the final result.
What would you recommend to do that ?

2010/11/30 Eloi Du Bois <eloi.du.bois_at_[hidden]>

> Wow ! Excellent :)
>
> I thought it would be more verbose than that.
>
> Thank you very much,
> Eloi Du Bois.
>
> 2010/11/30 Hartmut Kaiser <hartmut.kaiser_at_[hidden]>
>
>> > > > Is there a simple math expression parser in boost ?
>>
>> > > > I only need to parse those kind of expression: "1+2/3".
>> > > I believe Spirit is exactly what you're looking for. It has almost a
>> dozen
>> > > different calculator examples to choose from as a starting point for
>> your
>> > > needs.
>> > >
>> > > > I have been thinking on boost::spirit, but it is quite hard for what
>> I
>> > > > need.
>> > > Why?
>> >
>> > I very enjoy playing with spirit, but I was looking for a 5-line code
>> that
>> > only boost have the secret...
>>
>> Well, not exactly five lines, but here is a simple calculator grammar
>> written in Spirit:
>>
>> namespace qi = boost::spirit::qi;
>>
>> template <typename Iterator>
>> struct calculator : qi::grammar<Iterator, qi::space_type>
>> {
>> calculator() : calculator::base_type(expression)
>> {
>> expression = term >> *( ('+' >> term) | ('-' >> term) ) ;
>> term = factor >> *( ('*' >> factor) | ('/' >> factor) ) ;
>> factor = qi::uint_ | '(' >> expression >> ')' |
>> ('-' >> factor) | ('+' >> factor) ;
>> }
>> qi::rule<Iterator, qi::space_type> expression, term, factor;
>> };
>>
>> And here is how to use it:
>>
>> std::string input("1+2/3");
>> calculator<std::string::const_iterator> calc;
>> if (phrase_parse(input.begin(), input.end(), calc, qi::space))
>> std::cout << "successfully parsed: " << input << std::endl;
>>
>> Regards Hartmut
>> ---------------
>> http://boost-spirit.com
>>
>>
>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
>
>



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