感谢用户的帮助' sehe'我现在处于可以接受的地步 编译我的。
(请参见此处:https://stackoverflow.com/a/29301655/1835623)
现在从我需要解析的JEDEC文件中提取的一个数据字段如下所示:
" 12345 0000100101010111010110101011010"
我已经构建了一个解析器来使用这些字段:
std::string input("12345 010101010101010101010");
std::string::iterator st = input.begin();
qi::parse(st, input.end(), qi::ulong_ >> ' ' >> *qi::char_("01"));
显然没那么复杂。现在我的问题是我要分配
使用语义操作将ulong_和二进制字符串转换为某些局部变量。这就是我所做的:
using boost::phoenix::ref;
std::string input("12345 010101010101010101010");
std::string::iterator st = input.begin();
uint32_t idx;
std::string sequence;
qi::parse(st, input.end(),
qi::ulong_[ref(idx) = qi::_1] >>
' ' >>
*qi::char_("01")[ref(sequence) += qi::_2]);
但不幸的是,这甚至没有编译和我得到的错误消息 没有帮助(至少对我而言)?我想这很简单...但我现在已经无可救药地被困住了。 : - (
有人知道我做错了吗?
答案 0 :(得分:1)
两种方式:
修复SA的
qi::parse(st, input.end(),
qi::ulong_[ref(idx) = qi::_1] >>
' ' >>
qi::as_string[*qi::char_("01")] [phx::ref(sequence) += qi::_1]);
注意:
qi::_1
,因为SA附加的表达式不会暴露两个元素,只有1个phx::ref
因为否则ADL¹会选择std::ref
(因为std::string
)as_string
来强制std::vector<char>
然而,当然,一如既往:Boost Spirit: "Semantic actions are evil"?
qi::parse(st, input.end(),
qi::ulong_ >> ' ' >> *qi::char_("01"),
idx, sequence
);
使用解析器API绑定对属性的引用。
¹What is "Argument-Dependent Lookup" (aka ADL, or "Koenig Lookup")?