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?
Regards Hartmut
---------------
http://boost-spirit.com
_______________________________________________
Boost-users mailing list
Boost...@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
Before I comment on using or not using Spirit what exactly are you trying to do? From what I can see you are trying to parse a single-digit numbers and only support addition and division. Is that correct?
Stephen
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;
Why don't you look for yourself here: $BOOST_ROOT/libs/spirit/example/qi/calc3.cpp (or any of the more complex calculator examples)?