【问题标题】:Boost Spirit X3 local variables and getting the synthesized attributeBoost Spirit X3 局部变量并获取合成属性
【发布时间】:2016-02-04 17:54:47
【问题描述】:

我正在尝试将解析器从 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&lt;int&gt; 正在合成的规则。

【问题讨论】:

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


    【解决方案1】:

    我也有同样的发现!

    “locals”的诀窍是使用with&lt;&gt; 指令。

    因为你没有给出使用场景,我认为不值得举出例子,尽管你可以搜索我的答案*

    第二个技巧是只使用语义操作(可以是 lambda)并分配 _passBoost 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;
    };
    

    【讨论】:

    • 感谢您的回答,很抱歉这么晚才接受。等我带着我的笔记本电脑回来试试看:)
    • 没问题。我希望你的笔记本电脑不会和你长期离婚:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多