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

c++ - 不推荐使用增强精神标题

我正在关注 boost::spirit 的快速入门指南,当我包含以下内容时收到编译器警告:“此标头已弃用。请使用:boost/spirit/include/classic_core.hpp” 我应该担心这个吗?

(快速入门指南:http ://spirit.sourceforge.net/distrib/spirit_1_8_5/libs/spirit/doc/quick_start.html ,我试图在这里编译的程序的完整源代码:http://spirit.sourceforge。 net/distrib/spirit_1_8_5/libs/spirit/example/fundamental/number_list.cpp

编辑:此外,当我尝试使用推荐的 classic_core.hpp 和 classic_push_back_actor.hpp 头文件进行编译时,我收到以下编译器错误:

0 投票
1 回答
157 浏览

c++ - 使用 Spirit Parser 框架处理转义

我正在尝试使用精神解析器解析类似于以下内容的字符串:

<junk> -somearg#this is a string with a literal ## in it# <junk>

我正在寻找的是一种可以提取 # 标记内的部分的语法,但是很聪明地跳过了中间的双 ##,这是一个转义,意思是文字 #。

这就是我的想法:
confix_p(L'#', *anychar_p, L'#' >> ~ch_p(L'#'))
但是这会返回:
#this is a string with a literal ##
我希望它跳过##字符....这可能吗?

比利3

0 投票
2 回答
789 浏览

c++ - 在 boost::spirit 的 assign_a 中缩放

我正在研究 boost::spirit 以解析基于 ASCII 的协议。我设法使用如下规则从行中提取值:

我也成功地将这些规则以一种有意义的方式联系起来。完美的一天缺少以下内容:数据值是整数,需要使用固定的转换因子(通常是 10 的幂)转换为浮点值。

我现在所做的只是在解析后应用这些缩放因子。但是,我真的很想在字段的规则定义中包含比例因子。我想象这样的事情:

有什么建议么?

提前感谢阿恩

0 投票
1 回答
664 浏览

c++ - boost:spirit 重用规则

嘿嘿,另一个问题:

我编写了许多非常相似的解析器,它们使用了许多通用规则。我可以将这些规则<> 对象存储在多个解析器可以访问它们的地方吗?它看起来像这样:

我想将所有名为 nmea... 的规则放在一个公共位置,最好放在某个类的受保护静态变量中。我想在 Spirit 文档中称为语法的东西是关键,但老实说,我还不太了解它。

非常感谢!干杯!

0 投票
1 回答
125 浏览

stack-overflow - 尝试使用 Spirit 解析内容时,我不断收到堆栈溢出

我想当我开始出现堆栈溢出时,是时候来这里询问了;)

我现在正在尝试学习如何使用 Boost Spirit。我已经弄清楚了基本的东西。由于我手头有 K&R(其中包含 C 的语法),我决定看看我是否可以为该语言创建一个接受器。无论如何,这或多或少是我最初的目标,因为我最终想用它作为预处理器从数据结构和东西中收集一些信息。

我能够解析常量和字符串,但是当我尝试解析这个时,我开始遇到问题。

当我传递类似i++它失败的东西时。我认为这是因为i它是有效的primary_expression,所以它不会继续检查++or --。我试着把它放在底部,然后我得到堆栈溢出。我在这里得到了一些无限的左递归,但我不知道如何解决它。

0 投票
5 回答
18087 浏览

c++ - Boost.Spirit 入门指南?

我最近一直在查看 Boost.Spirit(Boost 1.39 中包含的版本),但是我对文档本身感到很困惑。我正在寻找的是一个用 Boost.Spirit 实现的玩具语言的示例——类似于小型 Javascript 或 Lua 左右的东西,您基本上可以在其中创建一个 AST 和进程。如果它只支持函数/变量定义和基本运算符,我会很高兴,我只想看看如何使用 Boost.Spirit 创建一个普通的 AST,以及如何实现标识符、声明等基本规则。

到目前为止,我已经尝试了计算器示例,但我不清楚如何使用 Spirit 实现更大的语法。另一方面,捆绑的 mini_c 示例看起来已经相当复杂,而且文档也不是很好。是否有一些易于理解的 Boost.Spirit 指南,或者一本书?

0 投票
3 回答
17892 浏览

c++ - 如何增加 gcc 可执行堆栈大小?

我有大型 Boost/Spirit 元程序,当我尝试编译它时,它正在破坏 gcc 的堆栈。

如何增加 gcc 的堆栈大小,以便编译该程序?

注意:没有无限递归进行,但有足够的偶然递归耗尽 gcc 的堆栈。

0 投票
2 回答
202 浏览

c++ - boost文件的编译错误

我在使用 boost 库编译代码时遇到很多错误,主要是在我使用 Spirit 命名空间时。这些错误是 boost 文件上的语法错误,例如:

boost/spirit/home/classic/dynamic/lazy.hpp(33):错误 C2143:语法错误:缺少';' 在'<'之前

或者

boost/spirit/home/classic/dynamic/lazy.hpp(33):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

或者

boost/spirit/home/classic/utility/grammar_def.hpp(104) : error C2039: 'nil_t' : is not a member of 'boost::phoenix'

我正在从 Visual Studio 6 迁移到 Visual Studio 2008 Express,并从最古老的 boost 版本之一迁移到最新版本。

我想知道有什么问题。我认为问题不能出在 boost 库中。

0 投票
1 回答
1109 浏览

c++ - 提升精神的BUG?

我正在尝试将我的代码从 VSC++ 6 迁移到 VSC++ 2008 速成版,并从英特尔编译器迁移到微软编译器。除了我现在收到此错误之外,一切都很容易迁移:

你可以看到,MS 编译器在 boost 库上显示语法错误。我在 boost 站点上发现这个编译器,版本 9,与库兼容。那么,我的代码发生了什么?

修复了已弃用部分的代码:

谢谢莱安德罗·利马

0 投票
1 回答
1701 浏览

parsing - Boost::Spirit 中的字符列解析

我正在为 Fortran 77 的一小部分开发基于Boost Spirit 2.0 的解析器。我遇到的问题是 Fortran 77 是面向列的,我无法在 Spirit 中找到任何可以允许其解析器的东西列感知。有没有办法做到这一点?

我真的不需要支持完整的神秘 Fortran 语法,但它确实需要能够忽略第一列中包含字符的行(Fortran 注释),并将第六列中包含字符的行识别为续行.

似乎处理批处理文件的人至少会遇到与我相同的第一列问题。Spirit 似乎有一个行尾解析器,但没有行首解析器(当然也不是 column(x) 解析器)。