Бустер слишком жаден

Я испытываю глубокое восхищение по поводу boost :: spirit и вечного разочарования, чтобы не понять этого;)

У меня проблемы со строками, которые слишком жадны и поэтому они не совпадают . Ниже приведен минимальный пример, который не анализируется по мере того, как правило txt "съедает".

Дополнительная информация о том, что я хотел бы сделать: цель состоит в том, чтобы проанализировать некоторый псевдо-SQL, и я пропускаю пробелы. В операторе вроде

select foo.id, bar.id from foo, baz 

мне нужно рассматривать из как особое ключевое слово. Это правило похоже на

"select" >> txt % ',' >> "from" >> txt % ',' 

, но оно явно не работает, поскольку видит bar.id из foo как один элемент.

#include <boost/spirit/include/qi.hpp>
#include <iostream>
namespace qi = boost::spirit::qi;
int main(int, char**) {
    auto txt = +(qi::char_("a-zA-Z_"));
    auto rule = qi::lit("Hello") >> txt % ',' >> "end";
    std::string str = "HelloFoo,Moo,Bazend";
    std::string::iterator begin = str.begin();
    if (qi::parse(begin, str.end(), rule))
        std::cout << "Match !" << std::endl;
    else
        std::cout << "No match :'(" << std::endl;
}
8
задан Raydel Miranda 3 July 2014 в 17:13
поделиться