问题标签 [boost-spirit-qi]

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 投票
1 回答
282 浏览

c++ - Boost Spirit 字符解析器

这是一个代码示例:

这应该打印==== (1 A)吧?但它会打印==== (1 ),所以它会跳过'A'字符。

我在这里做错了什么?

0 投票
1 回答
1762 浏览

c++ - Boost.Spirit,如何扩展 xml 解析?

我想使用 Boost.Spirit 扩展 xml 解析,并想添加 xml 属性的解析。

这里是图书馆的例子和我的一些修改:

我试过这个,但它没有编译错误“使用未声明的标识符'eps'”:

有谁知道该怎么做?如何添加解析xml属性的能力?

0 投票
2 回答
447 浏览

c++ - Boost Spirit Rule 的赋值运算符

这是我第一次在这里提问。我已经花了很多时间和研究来完成这项工作,但我做不到。我真的希望你能帮助我。我是使用 Spirit 的新手,我不完全理解所有术语;然而,即使在阅读了大量文章和帖子之后,我也不知道我错过了什么。

所以,我在头文件中有以下结构和类。

然后我在 .cpp 文件中有以下内容:

没有在方法上注释的代码parse()不起作用,Access Violation只要解析器到达qg_string规则,我就会得到一个。但是,注释的代码可以完美运行。除了明显的差异外,它对我来说看起来完全一样。也许我错过了一些非常明显的东西,但我找不到它。

如果我将所有内容都用作局部变量,我已经花了很多时间才发现我的代码可以工作。而且还是找不到问题。

预先感谢您的任何帮助。抱歉,如果帖子中有任何错误(凌晨 5 点)。

0 投票
1 回答
3137 浏览

c++ - 是否可以在另一个语法定义中重用 boost::spirit::qi 语法?

是否可以在另一个语法中重用boost::spirit:qi语法(例如作为规则)?

例如,如果我定义一个语法来将文本行解析为包含街道地址的结构。

我可能想在其他两种语法中重用该语法,例如,一种可能用于解析存储在文件中的地址向量。另一种重用可能是更复杂的结构,其中一个字段是这个街道地址结构。

我没有在一个地方定义整个语法,而是考虑将其拆分为更小的可重用块,如果它们在一个头文件中就可以了。我的数据结构稍微复杂一些(结构中的几个字段以及其他结构的列表等等),所以我不想把它放在一个语法中。

是否可以通过这种方式重用boost::spirit::qi语法?

编辑:考虑一下,我是否只是qi::rule在命名空间中定义 s ,然后根据我需要的规则组合一个语法?

0 投票
1 回答
990 浏览

c++ - 使用 boost::spirit 解析二进制文件时更改属性类型

我已经成功地使用boost::spirit::qito 来解析由内置解析器(例如,等)组成的byte_little_word。但是,我现在需要解析不完全属于这些类别之一的数据。比如我想把一个16.16的定点二进制数转换成double;例如,little_word << little_16p16将解析 auint16_t后跟 a double(从定点数解析)。

我首先考虑了语义动作,但(我认为......)它们不合适,因为它们不会更改与解析器关联的属性的类型。我也无法弄清楚如何使员工结构解析示例适应这种情况,因为它依赖于boost::fusion. 这种方法在这里行不通,因为我显然无法uint32_tdouble不引起重大问题的情况下定义隐式转换。

我的倾向是我需要添加非终端来包装内置的二进制原始解析器或从头开始编写终端解析器。即使查看了 的来源qi_binary.hpp,我也不知道该怎么做。任何人都可以提供一些示例代码和/或指导我参考相关参考资料以开始使用吗?

0 投票
1 回答
994 浏览

c++ - 当我使用 boost::bind 时,为什么 boost::spirit::qi 语义动作不能与两个参数一起工作?

我尝试使用增强语义动作。在我的情况下boost::bind是最简单的解决方案。第一个例子运行良好;在这里,我在语义动作中只使用了一个参数。

我试图扩展我的代码。在第二种情况下,我想将两个参数传递给绑定函数,但编译器不会编译这段代码。什么是失败?我没有找到任何例子。第二个代码在这里:

0 投票
1 回答
54 浏览

c++ - 定义 BOOST_PHOENIX_ARG_LIMIT 无效

在语义动作中的boost::Spirit::Q语法中,我需要许多(超过 10 个)属性占位符。我尝试按照文档中的建议定义BOOST_PHOENIX_ARG_LIMIT变量,但没有效果。如果有人知道,如何制作,请告诉我。boost的版本是1.48.0,编译器是MinGW GCC 4.4.0

0 投票
1 回答
2374 浏览

c++ - boost:spirit::qi 解析器使用多种语法和 phoenix::construct

我在编写使用另一种 Qi 语法的 Qi 语法时遇到问题。此处提出了类似的问题,但我也在尝试使用 phoenix::construct 并遇到编译困难。

这是我正在尝试做的简化版本。我意识到这个例子可能很容易用BOOST_FUSION_ADAPT_STRUCT.

我可以使用 Spirit 文档中演示的短语解析方法来解析 Complex,但我希望能够轻松地将 Complex 语法集成到其他解析器(例如表达式解析器)中。有什么我遗漏的东西可以让我将 Real 和 Complex 对象解析为不同的实体,同时仍然能够在其他规则/语法中有效地使用它们?

0 投票
1 回答
419 浏览

c++ - boost::spirit 排列

我必须解析以下文本

我的选择继续提升:精神,因为我不必处理 flex 或 bison。

我终于有了这个语法

问题是花括号内的部分甚至可以交换;我已经阅读了关于置换运算符^的信息,但是当至少有一个操作数以任何顺序匹配时,我读到了该匹配。我需要我的语法只有当它们都以任何顺序并且只有一次时才匹配。

有人可以帮助我吗?

0 投票
1 回答
6924 浏览

c++ - 使用 boost::spirit 解析引用的字符串

我想解析一个句子,其中一些字符串可能未引用、“引用”或“引用”。下面的代码几乎可以工作 - 但它无法匹配右引号。我猜这是因为qq参考。在代码中注释了修改,修改导致“引用”或“引用”也解析并有助于显示原始问题与结束引号有关。该代码还描述了确切的语法。

要完全清楚:不带引号的字符串解析。带引号的字符串 like'hello'将解析打开的引号',所有字符 hello,但无法解析最终的引号'

我又做了一次尝试,类似于boost tutorials中的开始/结束标签匹配,但没有成功。

对于奖励积分:避免使用本地数据成员(例如char qq上面的示例)的解决方案将是首选,但从实际的角度来看,我将使用任何可行的方法!