Список «a b c, a b c,...» (необязательно пустой) должен быть преобразован в std:vector
это более или менее работает
оставшиеся проблемы: пустая строка не анализируется, а запятая в конце анализируется без ошибок
abc_rule >> *( ',' >> abc_rule )
Мне не ясно, почему синтаксический анализатор допускает одну запятую в конце - разве это не нарушает правило? запятая, а затем должно идти что-то, что заполняет правило abc_rule? анализ кажется недостаточно жадным или что-то в этом роде
и добавление опущенного *qi::space | спереди, чтобы разрешить пустые строки, не работает
Live On Coliru
#include
#include
namespace qi = boost::spirit::qi;
struct Out
{
std::string a, b, c;
};
BOOST_FUSION_ADAPT_STRUCT( Out, a, b, c )
int main()
{
using It = std::string_view::const_iterator;
qi::rule identifier_rule = qi::char_( "a-zA-Z_" ) >> *qi::char_( "a-zA-Z0-9_" );
#if 1
qi::rule abc_rule //
= qi::omit[*qi::space] >> identifier_rule //
>> qi::omit[+qi::space] >> identifier_rule //
>> qi::omit[+qi::space] >> identifier_rule //
>> qi::omit[*qi::space];
#else
qi::rule abc_rule = qi::skip( qi::space )[identifier_rule >> identifier_rule >> identifier_rule];
#endif
qi::rule abc_list_rule = abc_rule >> *( ',' >> abc_rule );
for( std::string_view test : {
"a0 b0 c0,a1 b1 c1", // valid
"a0 b0 c0,", // !!!should be invalid - due to comma at end
"XXXX", // invalid
"a0 b0 c0", // valid
"a0", // invalid
" " // !!!should be valid -> empty list
" , ", // invalid
} )
{
std::cout
Подробнее здесь: https://stackoverflow.com/questions/790 ... -of-spaces
Попробуйте проанализировать список, разделенный запятыми - необязательно пустой или полный пробелов ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Список, разделенный запятыми, для массива и заполнения раскрывающегося списка.
Anonymous » » в форуме Jquery - 0 Ответы
- 58 Просмотры
-
Последнее сообщение Anonymous
-