顺序或解析器a || b

时间:2014-09-26 18:50:34

标签: c++ boost boost-spirit boost-spirit-qi

我无法获得boost文档中提供的示例的修改版本以正确输出

这是关于顺序OR解析器的文档: http://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/spirit/qi/reference/operator/sequential_or.html

test_parser("123.456", int_ || ('.' >> int_));  // full

我希望这个表达式用{2}条填充vector<int>

[0] = 123
[1] = 456

为什么这不起作用?

string input("123.456");
vector<int> output;

string::iterator i = input.begin();

parse(i, input.end(), int_ || ('.' >> int_), output);

我已经验证了解析返回truei == input.end()。我还尝试了不同的输出数据结构,包括带有选项的元组和可选项的向量。它们都产生一个只包含123个条目的条目,而不是456个。

1 个答案:

答案 0 :(得分:1)

||解析器将解析为tuple<optional<A>, optional<B> >(对于乐观场景)。这永远不会与您的容器属性兼容。

但是,看起来你可以使用

parse(i, input.end(), -int_ >> -('.' >> int_), output);

那说......如果我是秘密Clippy,我可能会说&#34;看起来你正在试图解析实数。

考虑float_double_或具有自定义政策的基础real_parser。另见: