boost-spirit相关内容

提升精神V2 与优化级别相关的气错误

我在业余时间开发我的代码.最好在调试模式下.最近,当我尝试构建发布版本时,我得到了错误(运行时,输出:1\n2\n 然后失败).我找到了包含错误的一段代码(如下),我发现只有在优化级别为 -Os、-Ofast、-O2、-O3 而不是 -O、-O0、-O1、-Og.在发布模式下,我的调试能力受到限制.错误的原因是什么?发现此类错误的方法是什么? #!/usr/bin/env bash -vex ..

带有调试输出的 X3 解析器段错误 (BOOST_SPIRIT_X3_DEBUG)

更新 这个问题涉及两个问题(如接受的答案所示),这两个问题都存在于版本中Boost Spirit X3 随 Boost 1.64 一起提供,但在撰写本文时 (2017-04-30),两者现在都已在开发分支中修复(或至少在编译时检测到). 我更新了 mcve 项目,以反映我使用开发分支所做的更改最新的 boost 版本,希望它可以帮助其他面临类似问题的人. 原来的问题 我正在 ..

Boost Spirit可以用来解析字节流数据吗?

Spirit(Boost C++ 库的一部分)可以用来解析来自流的二进制数据吗?例如,它能否用于将来自套接字的数据解析为结构、字节和单个位标志?谢谢! 解决方案 Boost Spirit 允许使用 扩展 Backus–Naur 形式 (EBNF) 语法与 模板元编程.它非常灵活,在解析过程的所有阶段都使用抽象类,可以自定义.为了处理二进制数据流,您需要实现自定义扫描器类,因为默认类型是为文 ..
发布时间:2022-01-07 20:32:47 C/C++开发

使用 Boost Spirit 解析命令语言

我正在为从各种示例中拼凑而成的命令语言构建解析器.我读过 Boost Spirit Qi 和 Lex 文档,我想我了解基础知识,但从我读过的内容来看,我应该避免使用属性并使用 utree.我在 utree 上找到的文档基本上很烂.鉴于下面的代码,我有以下问题: 如何注释解析器以使用 utree 创建 AST? 如何在 utree 构建后遍历它,以发现解析的内容?例如对于仅令牌命令,例如 S ..
发布时间:2022-01-04 10:03:59 C/C++开发

检测 Spirit 语义动作中的参数类型

一般情况:我不明白为什么我的 Spirit 语法/语义动作没有编译. 有时,编译器会抱怨赋值或类型不兼容,我不知道出了什么问题.问题主要出现在两个方面: 预测规则/表达式的综合属性类型 因此,预测哪些类型的属性可以合法地定义为规则的公开属性(依赖于内置转换、融合适配器或 Spirit 自定义点) 匹配我的语义动作的参数类型,以便 编译器将能够编译函数调用 调用不会在过程中调 ..
发布时间:2021-12-31 22:15:10 C/C++开发

Boost.Spirit:Lex + Qi 错误报告

我正在为使用缩进等的相当复杂的配置文件编写解析器.我决定使用 Lex 将输入分解为标记,因为它似乎让生活更轻松.问题是我找不到任何使用 Qi 错误报告工具 (on_error) 和解析器的示例,这些解析器对令牌流而不是字符进行操作. 要在 on_error 中使用的错误处理程序需要一些时间才能准确指出错误在输入流中的位置.所有示例都只是从一对迭代器构造 std::string 并打印它们.但 ..
发布时间:2021-12-26 13:13:43 C/C++开发

让 boost::spirit::qi 使用 stl 容器

我正在尝试使用 boost.spirit 的 qi 库解析某些内容,但遇到了一个问题.根据 精神文档, a >>b 应该产生类型为 tuple 的东西.但这是一个 boost::tuple(又名融合向量),而不是 std::tuple(我想要的). 有没有什么简单的方法可以在 boost::tuple => std::tuple 之间进行这种转换? 同一个文档页面说 *a 应该产生类型 ..
发布时间:2021-12-24 15:48:08 其他开发

示例解析错误

我正在尝试按照示例解析提升精神 (2.5.2) 的示例.我的代码如下 #include #include #include #include int main(){//解析两个数字std::string input("1.0 2.0");std::pairp;boost::spirit::qi::phrase_parse(input.begin(),input.end(),boost::spir ..
发布时间:2021-12-24 15:42:50 C/C++开发

Boost Spirit还原解析

我想解析一个包含以下结构的文件: 一些垃圾*&%第 1 节 {部分内容}第2节{部分内容} 解析section_name1 { ... } section_name2 { ... } 的规则已经定义: section_name_rule = lexeme[+char_("A-Za-z0-9_")];section = section_name_rule >点亮(“{")>/*一些复杂的事情* ..
发布时间:2021-12-24 15:42:39 C/C++开发

将属性传递给子规则以提升精神

我有两个具有相同属性的规则. 是否可以将matrix_规则的属性传递给matrixBlock_子规则?我想防止重复指令创建形式 vector.相反,它应该继续写入 matrix_ 的属性(numBlocks 的次数).我试图将属性作为继承属性传递给子规则并编译(见下文).但是我在我的向量中得到了几个“幽灵"条目,它们不是来自 phoenix::push_back.此外,这对我来 ..
发布时间:2021-12-24 15:42:33 C/C++开发

语义动作在 boost::spirit 解析中多次运行

我正在尝试在使用 boost::spirit 解析时创建具有语义规则的 AST.AST 必须只为输入的一部分构建,输入的另一部分应该在没有语法树的情况下进行解析. 例如,对于这样的输入字符串:“self.usedFoo(Bar).filter(self.baz > baz)"或“self.Foo.filter(true)">)" AST 应该只为粗体部分构建. 还有一个问题:解析器运行 ..
发布时间:2021-12-24 15:42:26 C/C++开发

如何自定义默认的 Boost xml 序列化默认节点命名以使其更具可读性

下面的代码生成一个 xml 文件,但是,当它循环映射时,它总是将映射键命名为 first,将值命名为 second 有没有办法可以自定义标签名称first和second到groupid和groupType,如图所示在所需的输出 #include #include #include #include #include #include #include 使用命名空间标准;类 MyConne ..

我如何理解 boost 精神编译器错误

我正在尝试使用 no_skip 指令来解析表单的输入: state PASS状态失败 我使用 ascii::blank 作为我的船长.当我包装 no_skip[ trans_assign_expr ] 以解析选项卡时出现编译错误. 我该如何修复这个错误,一般来说,我如何理解这些错误以便我可以修复未来的错误?boost Spirit 文档从未涵盖使用 Spirit 的这一方面:( 这 ..
发布时间:2021-12-24 15:41:27 C/C++开发

使用替代解析器提高精神不佳的表现

我已经问过关于这个问题的问题.但由于没有答案,我现在再次询问完整的可编译源代码片段. 由于 boost::variant 移动语义的一些问题,此代码片段应在不使用 std=c++11 选项的情况下进行编译.只是'g++ -Wall -pedantic'. 在此代码片段中,您将找到“//Comment here"行.您可以评论以下块,直到“//And here -----".如果取消注释 ..
发布时间:2021-12-24 15:41:19 C/C++开发

使用 boost xpressive 降低性能

最近我一直在使用 boost xpressive 来解析文件.这些文件每个 10 MB,将有数百个文件需要解析. Xpressive 很好用,语法清晰,但问题在于性能.它在调试版本中的爬行方式令人难以置信,而在发布版本中,它每个文件花费的时间超过一整秒.我已经针对旧的普通 get_line()、find() 和 sscanf() 代码进行了测试,它可以轻松击败 xpressive. 我 ..
发布时间:2021-12-24 15:40:16 其他开发

boost::spirit::qi 置换解析器和合成属性

我正在尝试将一个简单的命令行解析器与 SPIRIT 放在一起,而没有语义操作.我正在使用 BOOST 1.52,但我想避免使用 C++11 功能.语法具有以下语法: [-p num1] [-j] [--jobs num2] str1 str2 可选参数可以是任意顺序.我只成功解析了可选参数.一旦我添加了额外的强制性两个字符串解析器,它就会中断.即使我尝试明确写下“rstart"属性并避免使用“ ..
发布时间:2021-12-24 15:40:03 C/C++开发

无法让 boost::spirit 解析器和词法分析器为 std::string 或 int 或 double 以外的标记类型工作

这不会编译(下面的代码). 这里还有另一个问题,也有同样的错误.但我不明白答案.我已经尝试在某些地方插入 qi::eps -- 但没有成功. 我还尝试为所使用的类型添加元函数(boost::spirit::raits::is_container)——但这也无济于事. 我还尝试使用包含我需要在任何地方使用的所有类型的相同变体.同样的问题. 有没有人让这个词法分析器返回除 do ..
发布时间:2021-12-24 15:39:39 C/C++开发