Как разобрать в std :: string с boost spirit и phoenix?boost spirit и phoenix parsing в std :: string
Например, ниже я успешно разбираю 1234 в int, но когда я пытаюсь разобрать в строку, синтаксический анализ не выполняется. Если я заменяю на +qi::alnum
, тогда синтаксический анализ удастся, но номер строки имеет нежелательное значение «4». Кажется, что qi :: alnum соответствует только одному символу; как я разбираю многосимвольную буквенно-цифровую строку?
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <iostream>
#include <string>
int main() {
namespace qi = boost::spirit::qi;
namespace phoenix = boost::phoenix;
std::string s("--1234--");
{
int number = 0;
bool success = qi::parse(s.begin(), s.end(),
qi::lit("--") >> qi::int_[ phoenix::ref(number) = qi::_1 ] >> qi::lit("--")
);
std::cout << success << " qi::int_ parses: " << number << std::endl;
}
{
std::string number;
bool success = qi::parse(s.begin(), s.end(),
qi::lit("--") >> qi::alnum[ phoenix::ref(number) = qi::_1 ] >> qi::lit("--")
);
std::cout << success << " qi::alpha parses: " << number << std::endl;
}
return 0;
}
Вы также можете использовать [ 'BOOL успех = й :: синтаксического анализ (ИТЭР, конец, "-" >> + й :: >> цифры, буква "-", номер);'] (HTTP: //melpon.org/wandbox/permlink/gv8seAyNavZoBxua). – llonesmiz