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]; 我仍然不确定这是否是最好的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – Database_Cleaner在规范中间销毁HTTP请求
- ruby-on-rails – Rails&Devise:覆盖SessionsControll
- ArcGIS.Server.9.3和ArcGIS API for Flex实现自己的Toc控件
- 正则表达式
- ORACLE LONG类型转化成VARCHAR2的函数
- ajax操作 Parser error!
- quick-cocos2d-x按钮补丁
- jsf – h:尽管escape =“false”,outputText也没有从XML响
- ruby-on-rails – 使用Factory Girl时未定义的方法`stringi
- c# – ASP .NET核心输入标记助手不使用Razor代码