提升精神 X3 局部变量并获取合成属性
Boost Spirit X3 local variables and getting the synthesized attribute
我正在尝试将解析器从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>
。
我也有同样的发现!
"当地人"的诀窍是使用 with<>
指令。
因为您没有给出使用场景,所以我认为不值得提出示例,尽管您可以搜索我的答案*
- 提升精神X3无法编译具有可变因子的重复指令
- 提升精神 X3 AST 在使用单独的规则定义和实例化时无法使用语义操作
- 将提升精神用于基于堆栈的语言
第二个的诀窍是只使用语义操作(可以是 lambda)并分配_pass
: Boost Spirit X3 无法编译带有可变因子的重复指令也显示了这一点:
auto zerosum = [](auto &ctx) {
auto& v = x3::_attr(ctx);
_pass(ctx) = std::accumulate(v.begin(), v.end(), 0) == 0;
};
相关文章:
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 如何将类的属性从 c++ 获取到 QML 中
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 如何使用C++获取/设置OBS中的垂直滚动过滤器属性?
- 如何在提升图形库中获取属性的类型
- 获取正在运行的程序的属性
- 使用setW()函数保存文件时,如何获取每个属性的值
- 如何在Qt中解析未知的xml并获取其中的所有属性
- 通过EventFilter到剪贴板获取QlineEdit的某些属性
- 如何在自定义操作DLL(MSI / Wix)中获取"INSTALLED"属性?
- 提升属性树:如何使用xml文件获取子树的子级
- C++,无法获取受保护的抽象类属性
- 使用 CDT 从头文件中获取属性定义的节点元素是什么
- 从元对象获取属性更改通知程序
- 按名称获取属性值
- QWebEngine:如何获取属性值
- c++使用链接从哈希表中获取属性
- 在libXML sax解析器(c++)中获取属性值的正确方法是什么?
- 如何在libxml2中获取属性并保存在c++的stl map中
- 如何通过脚本从Windbg中获取C++属性的地址