我正在使用Boost 1.44,Spirit解析器适用于数值解析,但对于字符串解析来说真的很棘手。我试图解析一个字符串,使用多个分隔符进行拆分:',',';'要么 ' '。当我这样做时,它适用于数字(其中vect = vector< double>):
qi::parse(first,last,double_ >> *(',' >> double_ | ' ' >> double_ | ';' >> double_),
VECT,空间);
然而,当我使用vect = vector<修改字符串的语法时string>,
+char_ >> *(',' >> +char_ | ' ' >> +char_ | ';' >> +char_)
我收到以下错误:
/usr/include/boost/spirit/home/qi/detail/assign_to.hpp:109:13: error: invalid conversion from ‘char’ to ‘const char*’/usr/include/boost/spirit/home/qi/detail/assign_to.hpp:109:13: error: initializing argument 1 of ‘std::basic_string<_CharT, _Traits,_Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]’
我将错误缩小为语法语法中的第一个+ char_,它被视为一系列字符而不是字符串。有没有办法解决这个问题?
由于
答案 0 :(得分:7)
使用更新版本的Spirit,字符串处理(您的方式)变得更加容易。我建议使用Spirit from Boost V1.47,它重新修改了属性处理代码。
但即使它以你想要的方式编译,它也不会按你期望的方式解析。精神本身就是贪婪的,这意味着+char_
将无条件地消耗你输入中留下的任何东西。
+~char_(", ;") % char_(", ;")
即。集合+
中没有(~
)的一个或多个(", ;"
)字符正好插入其中一个字符。列表解析器(%
)公开vector<A>
,其中A
是左手表达式的属性,在上面的情况下为vector<string>
。