问题标签 [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.

0 投票
0 回答
474 浏览

c++ - 提升精神 x3 错误处理错误

我正在尝试将错误处理添加到我的一个基本解析器中。解析器如下:

他们解析成这些结构:

我将这个基础用于 error_handling 和 annotation:annotationerror_handling

当我尝试测试解析器并编译它们时,我收到了这些错误:

这是德语

我试图自己学习如何在精神 x3 中使用错误实现错误处理,但我找不到一种方法来完成这项工作。任何人都可以帮助我了解 error_handling 在 x3 中的工作原理吗?我被困在这一点上。

0 投票
1 回答
676 浏览

c++ - 在编译时重复到已知 N 的 std::tuple

我想在编译时解析一个指定数量的元素。我已经尝试过该repeat()[]指令。以下代码显示了我的情况:

编译器错误信息:

如果我把它写出来就可以了:

但是有大量元素是混乱的。

有没有办法用“重复”指令来缩短语法?

0 投票
0 回答
248 浏览

c++ - 使用 Spirit X3 解析基于缩进的语法

我必须解析一种基于缩进的语言(如 python、yaml 或咖啡),并考虑使用 Spirit X3。

我知道我可以使用 Spirit Lex 或其他一些词法分析器库来生成缩进/缩进标记。

X3 是否提供了另一种方法来实现这一点,而无需使用额外的库?

是否已经为类似语言实现了 X3 语法?

在寻找可能的其他解决方案时,我在邮件列表中找到了这篇博文和一些相关主题,其中指出

虽然可以直接使用 Spirit.Qi 解析 python,但是在解析级别混合低级缩进处理看起来很混乱。

这是关于灵气的,但是:

  • 它没有提供一个具体的答案,如果没有 lex 是如何做到的。
  • 我对 Qi 或 X3 不太熟悉,但根据文档,我看不出如果没有 Lex,我怎么能实现这个功能。

我不一定要寻找一个完整的解决方案,只是为了一些指向正确方向的指针。

0 投票
1 回答
268 浏览

c++ - 如何在精神X3中添加条件期望点

我目前正在 X3 中为我的语法添加期望点。现在我遇到了一个规则,看起来像这样。

我想知道如何在此规则中添加条件期望点。就像“如果有一个“::”,那么必须跟在一个“之后id_string”或“如果有一个,.那么就必须跟在一个id_string”等等。对于这样的规则,我怎样才能实现这样的行为?

0 投票
3 回答
189 浏览

c++ - 为什么这个 Boost.Spirit x3 规则用尖括号正确解析,但用引号不正确?

下面的程序尝试解析 C++ 标头包含字符串,例如"my/file.hpp"<my/file.hpp>。由于我不明白的原因,我的代码无法解析"标题。这是 Spirit 中的错误,还是我遗漏了一些明显的东西?

0 投票
1 回答
59 浏览

c++ - 属性传播到嵌套地图

我想解析以下内容(第一列是标识符,第二列(日期)对于每个标识符都是唯一的,后跟一个浮点元组):

我最喜欢的结构是

这是否可以创建具有属性传播的有效语法(没有语义动作和/或稍后复制到此结构)?

解析语法可能如下所示:

在 coliru 不工作的现场示例

0 投票
1 回答
177 浏览

c++ - 将单个值解析为带有容器的 ast 节点

我的问题如下。我有一个 ast 节点,定义如下:

我有一个像这样的解析器来解析结构,它工作正常:

现在我想实现解析器也解析"bar",不带括号,但前提是它只有一个条。我试着这样做:

但这给了我一个编译时错误,因为x3::string("bar")返回一个字符串而不是一个std::vector<std::string>. 我的问题是,我怎样才能实现x3::string("bar")解析器(以及所有其他返回字符串的解析器)解析为向量?

0 投票
2 回答
793 浏览

c++ - 如何提高 boost::spirit::x3 键值解析器的性能

我正在使用boost::spirit::x3. 将性能与我的手写解析器进行比较时,boost::spirit::x3比这慢了大约 10%。

我正在使用 boost 1.61 和 GCC 6.1:

如何提高boost::spirit::x3基于解析器的性能?

活生生的例子

0 投票
1 回答
2337 浏览

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_tofree 函数(参见例如这个 SO answer)。

因此,我添加了一个move_to重载,如果我解析来自char*

活生生的例子

但是,它不会编译:

1)如果我使用解析std::string::const_iterator

的构造函数boost::string_view需要 aconst char*或 a std::string&

活生生的例子

如何实例化boost::string_viewfrom std::string::const_iterator

2) Ifboost/spirit/home/x3.hpp包含在move_to重载之前

活生生的例子

为什么没有选择我的重载?它不是比中定义的任何一个更好的重载boost/spirit/home/x3/support/traits/move_to.hpp吗?无论包含顺序如何,我如何确保选择我的超载?

0 投票
1 回答
858 浏览

c++ - 解析成向量使用 boost::spirit::x3

这是我之前关于boost::spirit::x3and的问题的后续问题boost::string_view

虽然我可以解析为std::vector<std::string>现场示例),但解析为std::vector<boost::string_view>失败并出现以下编译错误:


活生生的例子

我在这里想念什么?