#include <string>
#include <map>
#include <iostream>
#include <boost/spirit/core.hpp>
#include <boost/spirit/actor/assign_actor.hpp>
#include <boost/spirit/actor/insert_at_actor.hpp>
#include <algorithm>
using namespace boost::spirit;
bool parseConfig( const char * str, std::map<std::string,std::string> & mp ) {
mp.clear();
std::string key;
return parse(str,
((lexeme_d[+alnum_p][assign_a(key)] >> '=' >> lexeme_d[+alnum_p][insert_at_a(mp,key)]) % ','),
space_p
).full;
}
void show_elem(const std::pair<std::string,std::string> & pair) {
std::cout << pair.first << " = " << pair.second << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::map<std::string,std::string> map;
std::cout << parseConfig(" key1=val1, key2=val2, param=param_val ", map) << std::endl;
std::for_each(map.begin(), map.end(), show_elem);
return 0;
}
Colored with dumpz.orgПример будет дополняться объяснениями.
Очень хорошо объяснено тут:
http://blog.alno.name/ru/2008/09/parsers-in-cpp-with-boost-spirit
Комментариев нет:
Отправить комментарий