All pastes #2121081 Raw Edit

Anonymous

public text v1 · immutable
#2121081 ·published 2012-02-23 18:12 UTC
rendered paste body
#define BOOST_SPIRIT_UNICODE
#include <boost/spirit/include/qi.hpp>

template <typename Iterator>
bool parse_numbers(Iterator first, Iterator last)
{
  namespace qi = boost::spirit::qi;
  namespace enc = boost::spirit::unicode;

  using qi::phrase_parse;
  using enc::alnum;
  using enc::space;
  using enc::char_;

  bool r = phrase_parse(
                        first,                          /*< start iterator >*/
                        last,                           /*< end iterator >*/
                        //lo_class('c') >> *(',' >> lo_class('c')),       /*< the parser >*/
                        alnum[ boost::phoenix::ref(std::cout) << "Read: " << qi::_1 << std::endl ],       /*< the parser >*/
                        space                           /*< the skip-parser >*/
                        );
  if (first != last) // fail if we did not get a full match
    return false;
  return r;
}

int main(int /* argc */, char **/* argv */)
{
    std::cout << "/////////////////////////////////////////////////////////\n\n";
    std::cout << "\t\tOne alnum parser\n\n";
    std::cout << "/////////////////////////////////////////////////////////\n\n";

    std::cout << "Give me an alnum (except [qQ]).\n";
    std::cout << "Type [q or Q] to quit\n\n";

    std::string str;
    while (getline(std::cin, str))
    {
        if (str.empty() || str[0] == 'q' || str[0] == 'Q')
            break;

        if (parse_numbers(str.begin(), str.end()))
        {
            std::cout << "-------------------------\n";
            std::cout << "Parsing succeeded\n";
            std::cout << str << " Parses OK: " << std::endl;
        }
        else
        {
            std::cout << "-------------------------\n";
            std::cout << "Parsing failed\n";
            std::cout << "-------------------------\n";
        }
    }

    std::cout << "Bye... :-) \n\n";
    return 0;
}