加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用boost :: spirit解析时,如何假设“默认值”?

发布时间:2020-12-16 09:26:45 所属栏目:百科 来源:网络整理
导读:假设我的语法定义为: some_rule := a b [c [d]] 其中c和d是可选的,如果没有给出,则默认为某个值(假设为14).如果没有给出值,我可以将其默认为14吗?我希望生成的std :: vector总是大小为4. 我最接近的是如下: qi::ruleIterator,std::vectorint(),ascii::spa
假设我的语法定义为:

some_rule := a b [c [d]]

其中c和d是可选的,如果没有给出,则默认为某个值(假设为14).如果没有给出值,我可以将其默认为14吗?我希望生成的std :: vector总是大小为4.

我最接近的是如下:

qi::rule<Iterator,std::vector<int>(),ascii::space_type> some_rule;
some_rule %= int_ >> int_ >> -int_ >> -int_;

// ...

some_other_rule = some_rule[&some_callback_for_int_vectors];

然后,对于未显示的可选值,我将获得0(我相信).然后我将最后的连续0改为14.这不仅错误,而且也不优雅.有一个更好的方法吗?

解决方法

看起来你可以用boost :: qi :: attr辅助解析器来做到这一点.

int default_value = 14;

qi::rule<Iterator,int(),ascii::space_type> some_optional_rule;
qi::rule<Iterator,ascii::space_type> some_rule;

some_optional_rule %= int_ | attr(default_value);
some_rule          %= repeat(2)[int_] >> repeat(2)[some_optional_rule];

我仍然不确定这是否是最好的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读