В следующем тестовом примере чередование одной альфа-бомбы и бомбы-последовательности с длинным дампом ошибок в основном говорит: static assertion failed: The parser expects tuple-like attribute type
. Интуитивно я ожидал, что все правило создаст строку, но это не то, что происходит. Мне нужно либо изменить левую сторону чередования на +alpha
(делая векторы обеих сторон), либо идти по пути семантических действий, по крайней мере, для одиночного символа в чередовании (добавьте к _val). Или измените одиночную левую сторону char_
на string
. В любом случае, я не могу понять, какой правильный простой способ синтаксического анализа строки так тривиален, как этот, любой совет приветствуется. TIA.
#include <iostream>
#include <boost/spirit/home/x3.hpp>
namespace x3 = boost::spirit::x3;
namespace grammar {
using x3::char_;
using x3::alpha;
using x3::xdigit;
const auto x =
x3::rule< struct x_class, std::string > { "x" } =
char_('/') > alpha >> *(alpha | (char_('#') > xdigit));
} // namespace grammar
int main () {
std::string input{ "/Foobar#F" }, attr;
auto iter = input.begin ();
if (phrase_parse (iter, input.end (), grammar::x, x3::space, attr)) {
std::cout << attr << std::endl;
}
return 0;
}