我想使用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
值?
答案 0 :(得分:2)
看起来在检查分号时正在应用了队长,因此在达到qi::no_skip[qi::eol]
时已经消耗了跳过字符(包括换行符)。以下内容适用于我,首先使用no_skip
令牌:
start = qi::int_ % (qi::no_skip[qi::eol] | ';');
我正在使用%
,因此最终整数不需要后跟分号或行尾。