Sequential Or语法分析器a||b

Sequential Or parser a || b

本文关键字:分析器 语法分析 Or 语法 Sequential      更新时间:2023-10-16

我无法获得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

我希望这个表达式用两个条目填充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。

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

然而,看起来你可以使用

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

也就是说。。。如果我私下里是Clippy,我可能会说"看起来你在试图解析实数。

考虑float_double_或可能具有自定义策略的底层real_parser。另请参阅:

  • 使用boost spirit(longest_d)解析int或double