问题标签 [boost-spirit]

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 投票
3 回答
10746 浏览

c++ - 使用 Boost::Spirit 的简单表达式解析器示例?

有谁知道在线资源,我可以在其中找到如何使用 Boost::Spirit 编写简单的表达式解析器?

我不一定需要评估表达式,但我需要解析它并能够返回一个布尔值来指示表达式是否可解析(例如括号不匹配等)。

我需要解析器能够识别函数名称(例如 foo 和 foobar),所以这也是一个有用的示例,可以帮助我学习编写 BNF 表示法。

表达式将是正规算术方程,即包括以下符号:

  1. 开/关括号
  2. 算术运算符
  3. 识别函数名称,并检查它们所需的参数
0 投票
3 回答
346 浏览

c++ - 指向类成员的指针

我正在使用 Boost Spirit 解析器,当解析器正在解析时,语义动作会反映到 ParserActions 类的实例中。

这是解析器的代码(相关部分)

0 投票
0 回答
174 浏览

c++ - boost::spirit::real_p 一些如何向上取整值

我正在使用 boost::spirit 解析器。有一次,当我使用 real_p 时,来自解析器堆栈的值是 38672000,而不是实际值 386731500。我认为它是如何将其视为浮点值的。有没有什么办法解决这一问题?我需要设置 real_p 的精度,还是在错误的上下文中使用 real_p?

0 投票
1 回答
2308 浏览

c++ - 使用 boost::spirit,我如何要求记录的一部分单独存在?

我有一个记录解析器,它抛出几个异常之一来指示哪个规则失败。

前题:

我们使用position_iteratorfrom Spirit.Classic,所以下面的流插入操作符很方便。

该模板err_t排除了用于抛出与不同形式的解析失败相关的异常的样板。

err_t与它们的包装一起使用的异常:

语法寻找简单的序列。没有epsstart规则会失败,而不是a空输入。

my_parse中,我们将流的内容转储到 a 中std::string并用于position_iterator跟踪解析的位置。

最后是主程序

上面的代码抛出MissingA

我认为船长可能已经消耗了换行符,但尝试lexeme[eol]却产生了相同的结果。

我一定遗漏了一些明显的东西,因为这似乎是最简单的解析器之一。我究竟做错了什么?

0 投票
1 回答
4138 浏览

c++ - 如何使用 boost::spirit::qi 解析行尾?

不应该一个简单eol的伎俩吗?

输出:

为什么后两者会失败?


相关问题:

使用 boost::spirit,我如何要求记录的一部分单独存在?

0 投票
1 回答
542 浏览

c++ - 在使用 boost::spirit 进行解析时,我如何假设一个“默认值”?

假设我有一个语法定义为:

其中c, 和d是可选的,如果没有给出,则默认为某个值(比如说 14)。如果没有给出值,我可以让它默认为 14 吗?我希望生产std::vector的始终是 4 号。

我最接近的是如下:

对于未显示的可选值(我相信),它将为 0。然后我将末尾的连续 0 更改为 14。这不仅非常错误,而且也不优雅。有一个更好的方法吗?

0 投票
1 回答
2197 浏览

c++ - 使用 Boost Spirit 2 解析字符串以在用户定义的结构中填充数据

我正在使用 Boost.Spirit,它与 VS2005 的 Boost-1.42.0 一起分发。我的问题是这样的。

我有这个用逗号分隔的字符串。它的前 3 个字段是字符串,其余字段是数字。像这样。

我的规则是这样的

我正在尝试将数据存储在这样的结构中。

我已经将它包装在 BOOST_FUSION_ADAPT_STRUCTURE 中,以便与精神一起使用。

我的 parse 函数解析该行并返回 true 和之后

我期待 var.stringVector 和 var.doubleVector 被正确填充。但事实并非如此。

出了什么问题?

代码示例位于此处

在此先感谢,苏里亚

0 投票
1 回答
226 浏览

c++ - 回复:帮助提升语法

0 投票
2 回答
3386 浏览

c++ - Boost Spirit 和 Lex 解析器问题

我一直在努力尝试和(逐步)修改文档中的示例代码,但没有太大的不同,我没有得到我期望的行为。具体来说,“if”语句在(我的意图是)它应该通过时失败(有一个“else”但解析器的那部分在调试期间被删除)。赋值语句工作正常。我也有一个“while”语句,它与“if”语句有同样的问题,所以我确信如果我能得到帮助来弄清楚为什么一个不工作应该很容易让另一个开始。它必须有点微妙,因为这几乎是一个例子中的逐字记录。

这是运行它的输出(读入字符串的文件首先在main中转储)

0 投票
1 回答
455 浏览

c++ - 使用版本 2 语法的良好/完整 Boot Spirit 示例

到目前为止,我看过的几乎所有示例:http ://boost-spirit.com/repository/applications/show_contents.php都使用旧语法。我已经阅读并重新阅读了http://www.boost.org/doc/libs/1_42_0/libs/spirit/doc/html/index.html上的实际文档以及其中的示例。我知道 Joel 正在博客http://boost-spirit.com/home/上开始编译器系列,但这还没有全面展开。在完全工作的应用程序的上下文中,还有其他资源可以查看使用一些更复杂/涉及的方面的工作示例吗?