Boost :: Дух, сочиняя грамматики из грамматиков
-
24-09-2019 - |
Вопрос
Я понял, как использовать дух - то есть я написал умеренно сложную грамматику. Я всегда принимаю подход к выращиванию программы - одна подсистема за раз. Я написал структуры данных для сложной модели, которая имеет 4 типа на самом высоком уровне.
Я хотел бы использовать Грамматика состоит из правил подхода Чтобы разбирать типы верхнего уровня одного типа за раз - т. Е. Я хочу написать 4 грамматики с помощью одной грамматики верхнего уровня. Если это возможно (который я начинаю сомневаться), может кто-то, пожалуйста, опубликовать фрагмент или ссылку на проект, который делает это.
Грамматика верхнего уровня с 50+ (возможна гораздо больше) Правила (для правильного обращения с ошибками) не звучит как удовольствие (код TMP - это нестабильный / медленный для компиляции и обеспечивает бесполезные сообщения об ошибках).
Решение
упрощенный из фактической программы, Qi. должен работать так же, как Карма.
template<class Iter>
struct subgrammar_1
: karma::grammar<Iter, ...>
{
...
}
template<class Iter>
struct top_level_grammar
: karma::grammar<Iter, ...>
{
top_level_grammar() : top_level_grammar::base_type(start)
{
start %= r1 | r2;
}
karma::rule<Iter, ...> r1;
subgrammar_1<Iter> r2;
...
}