问题标签 [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 回答
349 浏览

c++ - 无法从 boost::spirit::qi 中的规则生成语法

我第一次尝试使用 Spirit 库。到目前为止,我很享受它,但我发现自己无法从预定义的规则构建语法,即使在尝试受文档启发的示例时也是如此!

这是我的问题的核心:


这是编译器说的:

错误:没有匹配函数调用'test_phrase_parser(const char [6], ph_files_parsing::process_parsing::test_method()::my_grammar&)'</p>

注:候选人是:

注意:模板 bool test_phrase_parser(const char*, const P&)

如果我更换一切正常

经过

非常感谢任何可以提供帮助的人。

(升压版本为 1.48)

0 投票
1 回答
512 浏览

c++ - Boost.Spirit、Nabialek 技巧和错误处理

是否有可能以某种方式将“通用”错误处理(如教程中给出的)与 Nabialek 技巧结合起来?像这样:

现在,当some_other_rule被延迟调用并失败时,错误消息说这"lazy"是逐字记录的,而不是"other rule's name"(我需要的)。它应该以这种方式工作,而我只是在其他地方弄错了,还是涉及其他一些特定技巧?

0 投票
1 回答
102 浏览

c++ - Spirit::qi::grammar-name 具有不同的字符大小

我正在制作一个带有 spirit::qi 的解析器,旨在使其与不同的字符大小兼容。

鉴于

成功返回指向包含 _szFile 所需字符大小的字符串的指针。

当我编译时

我收到以下错误消息

所以 .. grammar::base_type 只期望 const std::string & 作为第二个参数。我的问题是,我怎样才能告诉 qi::grammar 期望一个带有 Iterators value_type size 的字符串?

提前致谢 !

0 投票
1 回答
161 浏览

boost-spirit-qi - 在 boost::spirit 中为解析器属性提供默认值

我一直在将 boost::spirit 实施到一个项目中,我面临的挑战之一是直接解析为以下类型的容器:

我快到了。我遇到的问题是自动分配 std::pair 的键值。也就是说,我的输入字符串中的每个标记都有一个预先确定的键,我希望在解析标记时将它自动插入到该对中。

我想我很接近,但也许不是......这是(截断的)语法:

最终结果是在命令行中输入:

并让解析器插入“命令”作为键,就好像我输入了:

因此,访问 map["command"] 元素将返回一个值 "select"。

问题是,我无法让 qi::attr() 完成这项工作。也就是说,如果我输入“命令选择”,它就可以工作,而不仅仅是“选择”。

0 投票
0 回答
202 浏览

c++ - 灵气语法问题

首先,很抱歉标题不准确,只是我实际上并不知道是什么导致了编译错误(我是 Spirit/phoenix/tuple 的新手),因此为了我的问题的可读性,我将整个语法导出到 pastebin: http ://pastebin.com/RsGM8E4r

代码在 Visual Studio 2010 中编译:

以及您在底部了解语法和我的问题所需的其他信息:

group 和 list 也有元素作为基础。

现在,我不明白的是,当您查看语法时, atom 的规则定义是:

这给出了一个很长的编译器错误列表,我无法真正理解..再次导出到 pastebin:http: //pastebin.com/k4HseJ01

但是,如果我将规则更改为

它编译成功,但是我需要从该规则中获取解析的数据:P

非常感谢您的帮助,我真的坚持了好几天。

0 投票
1 回答
355 浏览

c++ - 你如何从精神解析器中输出原始的未解析代码(作为注释)

给定输入字符串:A = 23; B = 5,我目前得到(预期的)输出:

我想看到这个:

核心代码行是:

其中 identifier 是一个 qi::symbols 表查找。

我的其余代码如下所示:

0 投票
2 回答
1900 浏览

c++ - 使用 Boost.Spirit 解析混合值和键值对

我有一个由混合变量 ( $(name)) 和变量值对 ( $(name:value)) 组成的简单语法。我有一个手动编码的递归解析器,但有兴趣将它用作学习 Spirit 的练习,我最终将需要更复杂的语法(/很快)。

无论如何,我正在使用的一组可能的形式(从完整的语法中简化)是:

我目前的规则如下所示:

如果不是很明显,我不知道 Spirit 是如何工作的,文档除了实际的解释之外什么都有,所以这大约是一个小时的例子。

我特别质疑的部分是变量规则中的前导部分char_('$')删除它会导致移位运算符错误(编译器解释'$' >> '('为右移)。

编译时,我得到与状态规则相关的错误,特别是创建对和查找:

  1. 错误 C2679:二进制“[”:未找到采用“const boost::spirit::_1_type”类型的右侧操作数的运算符(或没有可接受的转换)
  2. 错误 C2512:'boost::spirit::qi::rule::rule':没有合适的默认构造函数可用

将查找 ( vars[_1]) 更改为简单的+=给出:

3 . 错误 C2665:'boost::spirit::char_class::classify::is':15 个重载中没有一个可以转换所有参数类型

错误 1 ​​似乎与_1占位符的类型(属性?)有关,但这应该是一个字符串,并且用于打印或连接到输出字符串。2 似乎是由 1 引起的噪音。

错误 3,挖掘模板错误堆栈,似乎与无法将状态规则变成一对有关,这似乎很奇怪,因为它几乎完全匹配此示例中的一条规则。

如何修改变量规则以正确处理两种输入形式?

0 投票
1 回答
10182 浏览

c++ - Boost::Spirit 简单语法示例

我正在阅读 Boost Spirit(和 Boost Fusion)教程(1.48.0 版)。我一直在玩玩具员工的例子。源链接在这里:

http://www.boost.org/doc/libs/1_48_0/libs/spirit/example/qi/employee.cpp

这是示例的语法:

我的修改删除了引号的处理,只解析分隔符之间的任何字符并将其分配给解析器映射到的结构。

我的假设是 char_ 包括所有字符,直到到达逗号。但是,使用以下字符串编译和运行会返回解析失败。

我也在尝试编写一个类似的解析器来自动转换为我的结构类型的适当类型。我敢肯定,就像上面这样为输入字符串定义正确的语法而言,我遗漏了一些根本错误的东西,因此非常感谢任何帮助!

谢谢!

0 投票
1 回答
1278 浏览

c++ - 使用 boost::spirit 解析双打列表

这是一个代码示例。

我想std::string xparser p.

从 的定义如下 struct parser,行

应该是等价的。但是,第一个解析失败,第二个解析通过。

我在定义上做错了struct parser什么?

0 投票
2 回答
363 浏览

c++ - Boost Spirit Auto Parser 因双打元组而失败

在下面的代码中,我尝试将Boost Spirit Auto Parser用于一个序列或两个双打,但它无法编译。我在这里做错了什么?

被注释掉的行编译,所以它接受boost::tuple<double, double>作为 ; 的属性类型qi::double_ >> qi::double_。但它无法从属性类型中获取解析器。为什么?