2016-02-04 5 views
2

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

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

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

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

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

ответ

1

Образец в Using Boost Spirit to parse a text file while skipping large parts of it относится к X3, а также:

Live On Coliru

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

+0

искать [] и опускать [], кажется, соответствующие инструменты, которые непосредственно выполняют то, о чем я просил. Спасибо. – Zac

 Смежные вопросы

  • Нет связанных вопросов^_^