我正在尝试将解析器从Spirit V2移植到X3。总体经验还不错,但是有两个问题。
第一个是局部变量消失了,这对我来说很不方便,因为我经常使用它们来跟踪事物。因此,我要求提供一些能够在V2中完成本地工作的工具。
另一个最好通过此虚拟示例进行说明:我想将逗号分隔的整数列表解析为vector<int>
,但仅当列表总计为零时才应解析:
auto const int_list = rule<class int_list, vector<int>>("int_list")
= int_ % ','
>> eps(/* How to extract the attribute? */);
我在这里停留最后一次检查,因为我不知道如何掌握规则正在合成的
vector<int>
。 最佳答案
我有相同的发现!
使用“locals”的技巧是使用with<>
指令。
因为您没有给出使用情况,所以我不认为想出示例是值得的,尽管您可以搜索我的答案*
第二个技巧是仅使用语义 Action (可以是lambda)并分配
_pass
:Boost Spirit X3 cannot compile repeat directive with variable factor也显示了这一点:auto zerosum = [](auto &ctx) {
auto& v = x3::_attr(ctx);
_pass(ctx) = std::accumulate(v.begin(), v.end(), 0) == 0;
};
关于c++ - Boost Spirit X3局部变量并获取综合属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35208162/