Определите парсеры, параметризованные с помощью субпарсеров в Boost Spirit
Я хотел бы преобразовать некоторый старый рукописный код синтаксического анализа в Boost Spirit и изучить (больше) духа в процессе. Старый код использует потоки и шаблоны для анализа определений для некоторых типов данных и некоторых контейнеров.
Некоторые типичные форматы:
VECTOR[number_of_items,(item_1, item_2 .... item_n)]
PAIR(p1, p2)
RECT[(left,top)-(right,bottom)]
Point( x, y )
Size( x, y )
Функции синтаксического анализа являются шаблонами с типом элементов в качестве параметра шаблона и используют потоки в качестве входных данных, например,
template<class T> std::istream& operator>>(std::Stream& in, std::vector<T>& v);
template<class T1, class T2> std::istream& operator>>(std::istream& in, std::pair<T1, T2>& p);
template<class T1, class T2> std::istream& operator>>(std::istream& in, RectType<T>& r);
etc.
Анализатор (извлечение потока) для векторов вызывает синтаксический анализатор для типа шаблонов.
Используя их, можно анализировать определения целочисленных прямоугольников, двойных прямоугольников и векторов пар строк и целых чисел.
Возможно ли с помощью Spirit написать шаблонные парсеры, которые вызывают подпарсеры для типа шаблона?