Можно ли повторно использовать грамматику boost::spirit:qi
в другой грамматике (как правило, например)?
Например, если я определяю грамматику для разбора строки текста в структуру, содержащую уличный адрес.
template< typename iter >
struct address_grammar : qi::grammar< iter, address() >
{
...
qi::rule< iter, std::string() > street_name;
qi::rule< iter, std::string() > street_number;
qi::rule< iter, address() > address_;
}
Я мог бы повторно использовать эту грамматику в двух других грамматиках, например, может быть, для разбора вектора адресов, хранящихся в файле. Другое повторное использование может быть в более сложной структуре, где одно из полей - это структура адресного адреса.
template< typename iter >
struct company_grammar : qi::grammar< iter, company() >
{
...
qi::rule< iter, std::string() > comp_name;
// can I reuse the address grammar somehow here ???
qi::rule< iter, company() > company;
}
Вместо того, чтобы определять всю грамматику в одном месте, я собираюсь разбить ее на более мелкие блоки многократного использования, это нормально, если они находятся внутри одного заголовочного файла. Мои структуры данных несколько сложнее (пара полей внутри структуры со списком других структур и т.д.), Поэтому я не хочу помещать ее в одну грамматику.
Можно ли повторно использовать грамматику boost::spirit::qi
таким образом?
EDIT: Размышляя об этом, я просто определяю qi::rule
в пространстве имен и затем собираю грамматику из правил, которые мне нужны?