0

我想将整数序列解析为std::vector<int>, 使用boost::spirit. 整数可以用分号或换行符分隔。

但是这个语法不能编译:

typedef std::vector<int> IntVec;
template <typename Iterator, typename Skipper>
struct MyGrammar : qi::grammar<Iterator, IntVec(), Skipper> {
  MyGrammar() : MyGrammar::base_type(start) {
    start = +(qi::int_
              >> (";" | qi::no_skip(qi::eol)));
  }
  qi::rule<Iterator, IntVec(), Skipper> start;
};

为了清楚起见,我想解析以下输入,例如,

1; 2; 3
4 ; 5

成一个向量(1,2,3,4,5)。我该怎么做,为什么我的版本不能编译?

我可以以某种方式将分隔符(“分号或换行符”)写成自己的规则吗?它的返回类型是什么?某种null价值?

4

1 回答 1

2

检查分号时似乎正在应用跳过符,因此一旦qi::no_skip[qi::eol]达到跳过字符(包括换行符)就已经被消耗掉了。以下对我有用,no_skip首先是令牌:

    start = qi::int_ % (qi::no_skip[qi::eol] | ';');

我正在使用%,以便最终整数不需要后跟分号或行尾。

于 2012-05-06T02:49:00.863 回答