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?

questionAnswers(2)

yourAnswerToTheQuestion