Используя boost::spirit::qi, я пытаюсь разобрать строки, состоящие из метки, за которой следует переменное количество токенов с разделителями. Я вызываю грамматику с помощью phrase_parse и использую предоставленный синтаксический анализатор blank в качестве синтаксического анализатора пропуска, чтобы сохранить новые строки, поскольку мне нужно убедиться, что метка является первым элементом в каждой строке.
Простой базовый случай:
label token, token, token
Можно разобрать с помощью грамматики:
line = label >> (token % ',') >> eol;
Проблема, с которой я столкнулся, заключается в том, что грамматика должна принимать ноль или более токенов, и эти токены могут быть пустыми. Грамматика должна принимать следующие строки:
label
label ,
label , token
label token, , token,
Мне не удалось создать грамматику, которая принимает все приведенные выше примеры. Любые предложения о том, как решить эту проблему?
Изменить:
Спасибо sehe за весь вклад в проблему, изложенную выше. Теперь самое интересное, что я забыл включить... Грамматика также должна принимать пустые и разделенные строки. (токены без метки) Когда я пытаюсь сделать метку необязательной, я получаю бесконечный цикл, соответствующий пустой строке.
label
label token
token