Состояние запуска анализатора Spirit X3?

Я просматривал документацию Boost.Spirit X3, которую смог найти — что не так уж много — и думаю, что хотел бы использовать это для моего следующего проекта парсинга. Примечательно, что я никогда не использовал Boost.Spirit Classic или V2, но использовал flex / bison и ANTLR.

Формат, который я ищу для разбора, в его самом простом смысле выглядит следующим образом:

unimportant
foo
bar
# BEGIN
parse this
...
# END
ignore this

Где только текст между «# BEGIN» и «# END» анализируется, а все остальное полностью игнорируется. Я пытаюсь найти эффективный способ сделать это в парсере X3. Некоторые идеи у меня были:

  1. Используйте основные функции поиска строк, чтобы ограничить диапазон разбора. Это кажется худшим вариантом, так как текст будет обрабатываться несколько раз, а не за один проход.
  2. Загляни в Spirit.Lex. Опять же, я обнаружил некоторые трудности с поиском подходящего материала для чтения на Spirit.Lex, но кажется, что Lex предоставляет лексер стартовые состояния, которые были бы традиционным способом выполнения этой работы. Кроме того, поскольку X3 основан на C ++ 14, а Spirit.Lex построен поверх lexertl, Есть ли вариант конфигурации или способ использования Spirit.Lex с модернизированным lexertl14?
  3. Возможно, есть какой-то осмысленный способ справиться с этим в X3? Поскольку грамматика на самом деле очень проста, я думаю, что иметь отдельный лексер — это излишне.

2

Решение

Образец в Использование Boost Spirit для разбора текстового файла и пропуска его больших частей относится и к X3:

Жить на Колиру

Конечно, вы должны изменить его на свой вкус. Если вы ищете qi seek На [SO] вы найдете больше образцов, некоторые из которых могут быть еще ближе к вашей цели.

1

Другие решения

Других решений пока нет …