问题标签 [boost-spirit-x3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 提升精神 x3 错误处理错误
我正在尝试将错误处理添加到我的一个基本解析器中。解析器如下:
他们解析成这些结构:
我将这个基础用于 error_handling 和 annotation:annotation,error_handling。
当我尝试测试解析器并编译它们时,我收到了这些错误:
这是德语
我试图自己学习如何在精神 x3 中使用错误实现错误处理,但我找不到一种方法来完成这项工作。任何人都可以帮助我了解 error_handling 在 x3 中的工作原理吗?我被困在这一点上。
c++ - 在编译时重复到已知 N 的 std::tuple
我想在编译时解析一个指定数量的元素。我已经尝试过该repeat()[]
指令。以下代码显示了我的情况:
编译器错误信息:
如果我把它写出来就可以了:
但是有大量元素是混乱的。
有没有办法用“重复”指令来缩短语法?
c++ - 使用 Spirit X3 解析基于缩进的语法
我必须解析一种基于缩进的语言(如 python、yaml 或咖啡),并考虑使用 Spirit X3。
我知道我可以使用 Spirit Lex 或其他一些词法分析器库来生成缩进/缩进标记。
X3 是否提供了另一种方法来实现这一点,而无需使用额外的库?
是否已经为类似语言实现了 X3 语法?
在寻找可能的其他解决方案时,我在邮件列表中找到了这篇博文和一些相关主题,其中指出
虽然可以直接使用 Spirit.Qi 解析 python,但是在解析级别混合低级缩进处理看起来很混乱。
这是关于灵气的,但是:
- 它没有提供一个具体的答案,如果没有 lex 是如何做到的。
- 我对 Qi 或 X3 不太熟悉,但根据文档,我看不出如果没有 Lex,我怎么能实现这个功能。
我不一定要寻找一个完整的解决方案,只是为了一些指向正确方向的指针。
c++ - 如何在精神X3中添加条件期望点
我目前正在 X3 中为我的语法添加期望点。现在我遇到了一个规则,看起来像这样。
我想知道如何在此规则中添加条件期望点。就像“如果有一个“::”,那么必须跟在一个“之后id_string
”或“如果有一个,.
那么就必须跟在一个id_string
”等等。对于这样的规则,我怎样才能实现这样的行为?
c++ - 为什么这个 Boost.Spirit x3 规则用尖括号正确解析,但用引号不正确?
下面的程序尝试解析 C++ 标头包含字符串,例如"my/file.hpp"
和<my/file.hpp>
。由于我不明白的原因,我的代码无法解析"
标题。这是 Spirit 中的错误,还是我遗漏了一些明显的东西?
c++ - 属性传播到嵌套地图
我想解析以下内容(第一列是标识符,第二列(日期)对于每个标识符都是唯一的,后跟一个浮点元组):
我最喜欢的结构是
这是否可以创建具有属性传播的有效语法(没有语义动作和/或稍后复制到此结构)?
解析语法可能如下所示:
c++ - 将单个值解析为带有容器的 ast 节点
我的问题如下。我有一个 ast 节点,定义如下:
我有一个像这样的解析器来解析结构,它工作正常:
现在我想实现解析器也解析"bar"
,不带括号,但前提是它只有一个条。我试着这样做:
但这给了我一个编译时错误,因为x3::string("bar")
返回一个字符串而不是一个std::vector<std::string>
. 我的问题是,我怎样才能实现x3::string("bar")
解析器(以及所有其他返回字符串的解析器)解析为向量?
c++ - 如何提高 boost::spirit::x3 键值解析器的性能
我正在使用boost::spirit::x3
. 将性能与我的手写解析器进行比较时,boost::spirit::x3
比这慢了大约 10%。
我正在使用 boost 1.61 和 GCC 6.1:
如何提高boost::spirit::x3
基于解析器的性能?
c++ - 使用 boost::spirit::x3 从 std::string 解析为 boost::string_view
在我之前的问题中,有人建议我的boost::spirit::x3
解析器的性能可以通过解析为boost::string_view
使用raw
指令来提高。
但是,我很难编译它。这是我发现的:
之前
x3
,必须专门assign_to_attribute_from_iterators
(参见例如this SO answer)来处理raw
指令。x3
现在改用move_to
free 函数(参见例如这个 SO answer)。
因此,我添加了一个move_to
重载,如果我解析来自char*
:
但是,它不会编译:
1)如果我使用解析std::string::const_iterator
的构造函数boost::string_view
需要 aconst char*
或 a std::string&
。
如何实例化boost::string_view
from std::string::const_iterator
?
2) Ifboost/spirit/home/x3.hpp
包含在move_to
重载之前
为什么没有选择我的重载?它不是比中定义的任何一个更好的重载boost/spirit/home/x3/support/traits/move_to.hpp
吗?无论包含顺序如何,我如何确保选择我的超载?