Вопрос

Я понял, как использовать дух - то есть я написал умеренно сложную грамматику. Я всегда принимаю подход к выращиванию программы - одна подсистема за раз. Я написал структуры данных для сложной модели, которая имеет 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;
    ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top