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;
}