Zdefiniuj parsery sparametryzowane za pomocą podparserów w Boost Spirit
Chciałbym przekonwertować jakiś stary, ręcznie napisany kod parsujący na Boost Spirit i nauczyć się (więcej) ducha w tym procesie. Stary kod wykorzystuje strumienie i szablony do analizowania definicji dla niektórych typów danych i niektórych kontenerów.
Niektóre typowe formaty:
VECTOR[number_of_items,(item_1, item_2 .... item_n)]
PAIR(p1, p2)
RECT[(left,top)-(right,bottom)]
Point( x, y )
Size( x, y )
Funkcje analizujące są szablonami z typem elementów jako parametr szablonu i wykorzystują strumienie jako dane wejściowe, np.
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.
Parser (ekstraktor strumienia) dla wektorów wywołuje parser dla typu szablonów.
Za ich pomocą można analizować definicje prostokątów całkowitych, podwójnych prostokątów i wektorów par łańcuchów i liczb całkowitych.
Czy jest możliwe, aby Spirit tworzył parsery z szablonami, które wywołują podparsery dla typu szablonu?