I am trying to parse comma separated tokens containing hyphens. But lexeme
ignores all the hyphens. Part of program is as following.
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_utree.hpp>
namespace qi = boost::spirit::qi;
namespace bs = boost::spirit;
template<typename Iterator>
struct my_grammar : public qi::grammar<Iterator,bs::utree(),bs::ascii::space_type>
{
my_grammar() : my_grammar::base_type(start,"MY")
{
start = token % ',';
token = qi::lexeme[ +qi::alnum % qi::char_('-') ];
}
qi::rule<Iterator,bs::utree(),bs::ascii::space_type> start;
qi::rule<Iterator,std::string()> token;
};
template<typename Iterator>
bool parse(Iterator & begin,Iterator end,my_grammar<Iterator> const & grammar)
{
bs::utree a;
auto r = qi::phrase_parse(begin,end,grammar,bs::ascii::space,a);
std::cout<<a<<'\n';
return r;
}
int main()
{
std::string input = "i-j-k,l-m-n,p3-14 ,5jhjj-kkk";
auto it = input.begin();
my_grammar<decltype(it)> g;
if(::parse(it,input.end(),g))
{
std::cout<<"parse success\n";
}
else
{
std::cout<<"parse failed\n";
}
std::cout<<"Unparsed input => "<< std::string{it,input.end()}<<'\n';
}