如何将列表语法与默认精神一起使用

how to use list syntax with defaults spirit

本文关键字:一起 默认 列表 语法      更新时间:2023-10-16

我正在尝试解析逗号分隔的整数,可能带有空格。 例如,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]) % ','

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

正确的方法是什么?

缺口

attr()解析器的存在就是为了这个目的:

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