如何使用默认精神的列表语法

时间:2015-04-28 13:35:48

标签: c++ boost-spirit-qi

我试图用可能的空格来解析逗号分隔的整数。例如,1,2,,3,,-1应该被解析为{1,2,n,3,n,-1},其中n是常量。

表达式,

(int_ | eps) % ','

n == 0时有效。更具体地说,以下代码适用于0

#include <boost/spirit/include/qi.hpp>
#include <iostream>

int main() {
   using namespace boost::qi;
   std::vector<int> v;
   std::string s("1,2,,3,4,,-1");
   phrase_parse(s.begin(), s.end(), 
      (int_|eps) % ','
      , space, v);
}

我为任意n尝试了以下表达式:

(int_ | eps[_val = 3]) % ','

但显然这是错误的。编译器生成错误小说。我不会在这里粘贴所有内容,因为我尝试的很可能是不正确的(而不是特定的编译器问题)。

什么是正确的方法?

尼克

1 个答案:

答案 0 :(得分:0)

为此目的存在attr()解析器:

(int_ | attr(3)) % ','