Для текущей грамматики, которую я анализирую с помощью X3, пробелы и комментарии в стиле Perl игнорируются.
Мне кажется, что парсер пропуска в X3 - это просто обычный парсер, и любой ввод, который он потребляет, считается «пропущенным». Я придумал это:
namespace x3 = boost::spirit::x3;
auto const blank_comment =
x3::blank | x3::lexeme[ '#' >> *(x3::char_ - x3::eol) >> x3::eol ];
При анализе очень простого ввода (пара строк комментариев и одна строка строки в кавычках) это, похоже, работает хорошо. (Живите на Coliru)
Однако, поскольку я не могу найти никакой документации по этому вопросу, а детали текущих парсеров пропуска спрятаны в сложной системе шаблонов, я надеялся на некоторый ввод.
- Это правильный способ определения "парсера пропуска"? Есть стандартный метод?
- Есть ли проблемы с производительностью при такой реализации? Как бы это было улучшено?
Я ранее искал подробности в SO и нашел ответ с помощью Qi (Custom Skip Parser with Boost :: Дух). Поскольку я никогда не изучал Ци, многие детали трудно понять. Описанный выше метод кажется более интуитивным.