Ich versuche, durch Komma getrennte Token zu analysieren, die Bindestriche enthalten. Aber lexeme
ignoriert alle Bindestriche. Teil des Programms ist wie folgt.boost :: spirit :: qi :: lexeme erfasst kein vollständiges Token
#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';
}
viel Fettabsaugung mit Spirit X3 geben, wenn Sie C++ 14 verwenden können: ** [Live On Coliru] (http://coliru.stacked-crooked.com/a/b1539818a9062a78) ** – sehe
Ich habe nur C++ 11 mit GCC 4.7.3 – gjha
Problem mit dem obigen Vorschlag ist, dass ich eine Zeichenfolge wie 'abc - xyz' nicht akzeptieren will, dh' doppelter Bindestrich' ist nicht erlaubt . – gjha