Есть ли способ составить отдельно скомпилированные грамматики boost::spirit::qi?

Грамматики парсера Boost Spirit Qi замечательны, и я все время использую их для мелких вещей. Однако бывают случаи, когда я хотел бы иметь возможность составлять отдельные грамматики.

Это легко сделать все-в-одном в одном компиляторе, #включив соответствующие грамматики и соединив их вместе. Однако из-за этого время компиляции зашкаливает. Есть и другие недостатки.

Есть ли способ составить отдельно скомпилированные грамматики? Другими словами, я хотел бы определить интерфейс грамматики в заголовочном файле, реализовать шаблон и его создание для конкретного итератора в отдельной единице компиляции, а затем иметь возможность использовать грамматику из другого, не имея полного шаблона. определение видно во время компиляции. Другими словами, я хочу иметь возможность использовать грамматику в правиле косвенно.

Возможно ли такое? Если да, то как бы это сделать?


person wjl    schedule 26.06.2011    source источник


Ответы (1)


Я не думаю, что это что-то конкретное для Spirit, а скорее C++ 101. Если вам нужно составить несколько грамматик, вам нужно включить соответствующие заголовочные файлы, определяющие грамматики, которые вы хотите использовать при составлении. Возможно, вам захочется выделить компиляцию конструктора грамматики в отдельную единицу компиляции. Посмотрите примеры калькулятора Spirit (mini_c и другие), чтобы увидеть, как это можно сделать. Это сократит время компиляции.

person hkaiser    schedule 26.06.2011
comment
Спасибо. Пример mini_c действительно показывает, как это сделать, но меня сбило с толку то, что реализация все еще находилась в заголовочных файлах (например, грамматика операторов в mini_cc.hpp). На самом деле конструктор грамматики в этих заголовках включается и создается только один раз в одной отдельной единице компиляции (например, mini_cc.cpp для грамматики операторов). Я просто не смотрел достаточно близко. - person wjl; 26.06.2011