c++ - 基于 Boost spirit 语法的字符串拆分

标签 c++ boost boost-spirit boost-spirit-qi

我正在使用 Boost 1.44,Spirit 解析器适用于数字解析,但对于字符串解析来说确实很棘手。我正在尝试使用多个定界符解析要拆分的字符串:',' ,';'或者 ' '。当我这样做时它适用于数字(其中 vect = vector < double >):

qi::parse(first,last,double_ >> *(',' >> double_  | ' ' >> double_ | ';' >> double_),

vector ,空间);

然而,当我使用 vect = vector 修改字符串的语法时,

+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_,它被视为一系列字符而不是字符串。有什么办法可以解决这个问题吗?

谢谢

最佳答案

在 Spirit 的最新版本中,字符串处理(您的处理方式)变得更加容易。我建议使用 Boost V1.47 中的 Spirit,它对属性处理代码进行了重大重写。

但即使它按照您想要的方式编译,它也不会按照您期望的方式进行解析。 spirit 本质上是贪婪的,这意味着+char_将无条件地消耗您输入中剩余的任何内容。似乎有更好的

+~char_(", ;") % char_(", ;")

即一个或多个 ( + ) 字符不在集合 ~ 中 ( ", ;" )正好穿插其中一个字符。列表解析器 ( % ) 公开了一个 vector<A> , 其中A是左侧表达式的属性,vector<string>在上述情况下。

关于c++ - 基于 Boost spirit 语法的字符串拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549703/

相关文章:

c++ - 使用 boost spirit 解析为结构

c++ - 根据文本动态调整控件大小

c++ - win32 编程 C++

c++ - boost::date_time::days_until_weekday 的编译错误

c++ - 使用 boost spirit 解析带有可选分隔符的字符串

c++ - 如何与其他 boost 库一起构建 boost::fiber?

c++ - 使用 Boost Spirit Qi 解析特定字符串

c++ - 编译 Spirit 示例时出错

c++ - GPL如何影响存储在用户数据中的宏?

c++ - parent 访问 child