Можно ли повторно использовать 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
грамматику?
РЕДАКТИРОВАТЬ: Подумав об этом, я просто определить qi::rule
s в пространстве имен, а затем собрать грамматику из правил, которые мне нужны?