1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <iostream>
#include <string>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
#define BOOST_SPIRIT_USE_PHOENIX_V3
using namespace boost::spirit;
template <typename Iterator, typename Skipper>
struct pg_string_array_grammar : qi::grammar<Iterator, std::vector<std::string>(), Skipper>
{
pg_string_array_grammar() : pg_string_array_grammar::base_type{strings_}
{
string_ = *ascii::alnum;
quoted_string_ = "'" >> string_ >> "'";
strings_ = "{" >> ((quoted_string_ | string_ ) % ",") >> "}";
}
qi::rule<Iterator, std::string(), Skipper> string_;
qi::rule<Iterator, std::string(), Skipper> quoted_string_;
qi::rule<Iterator, std::vector<std::string>(), Skipper> strings_;
};
int main()
{
//std::string s1{"{'azerty',toto,titi tata,'qwerty','clavier','clavier us'}"};
std::string s1{"{'azerty', 'clavier fr'}"};
//std::string s1{"{'azerty', 'clavier'}"};
std::vector<std::string> v1;
pg_string_array_grammar<std::string::iterator, qi::space_type> g1;
if (qi::phrase_parse(s1.begin(), s1.end(), g1, qi::space_type(), v1))
{
for (const auto &elem : v1)
std::cout << elem << std::endl;
}
} |
Partager