boost-spirit-qi相关内容

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

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

在 C++ 中寻找搜索和替换的圣杯

最近我正在寻找一种方法来替换字符串中的标记,这基本上是查找和替换(但至少有一种额外的方法可以解决这个问题)并且看起来像是相当平庸的任务.我带来了几个可能的实现,但从性能的角度来看,它们都不令人满意.最好的成就是每次迭代约 50us.这种情况很理想,字符串的大小从未增长过,最初我省略了不区分大小写的要求 这是 Coliru 的代码 我的机器上的结果: Boost.Spirit 符号结果:34 ..
发布时间:2022-01-12 15:13:43 C/C++开发

使用 Boost Spirit 解析命令语言

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

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++开发

语义动作在 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::variant 移动语义的一些问题,此代码片段应在不使用 std=c++11 选项的情况下进行编译.只是'g++ -Wall -pedantic'. 在此代码片段中,您将找到“//Comment here"行.您可以评论以下块,直到“//And here -----".如果取消注释 ..
发布时间:2021-12-24 15:41:19 C/C++开发

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++开发

Boost.Spirit.Qi:动态创建“差异";解析时的解析器

可以通过二进制-(减号)运算符创建“差异"解析器: rule = qi::char_ - qi::lit("}}") 甚至复合差异: rule = qi::char_ - qi::lit("}}") - qi::lit("]]") 但是我怎么能在解析时生成差异解析器的整个结果? 我猜它可能是某种形式,如下所示: phoenix::function差异解析器;规则 = qi::lazy( ..
发布时间:2021-12-24 15:36:58 C/C++开发

boost::spirit::qi 关键字和标识符

我看过一些与 qi 语法中关键字/标识符使用的细微差别相关的帖子,但我不太明白 boost 示例中演示的方法应该如何工作...... 关键字声明: qi::symbols关键词; 示例关键字集: keywords.add(“富")(“酒吧"); 标识符规则声明: qi::rule标识符; 以下是 qi calc 和编译器示例中标识符规则的定义方式: identifier = ! ..
发布时间:2021-12-24 15:25:45 C/C++开发

使用 boost 精神解析 int 或 double (longest_d)

我正在寻找一种将字符串解析为 int 或 double 的方法,解析器应该尝试两种选择并选择匹配输入流最长部分的那个. 有一个已弃用的指令 (longest_d) 完全符合我的要求: number =longest_d[ 整数 |真实的 ]; ...既然已弃用,还有其他选择吗?如果有必要实施语义操作来实现所需的行为,有人有建议吗? 解决方案 首先,切换到 Spirit V2 - ..
发布时间:2021-12-24 15:13:11 C/C++开发

理解 Boost.Spirit 中的列表运算符 (%)

你能帮我理解 a % b 解析器和它扩展的 a >> 之间的区别吗?*(b >> a) 形式在 Boost.Spirit 中?即使参考手册 表示它们是等价的, 列表运算符 a % b 是一种二元运算符,它匹配由 ba 的一个或多个重复的列表代码>.这相当于 a >>*(b >> a). 以下程序会根据使用的程序产生不同的结果: #include #include #include # ..
发布时间:2021-12-24 15:09:27 C/C++开发

如何以提升精神正确解析保留字

我正在尝试解析以下语法序列: .例如: 浮点 foo 方向可以是in、out或in_out.通过使用 qi::symbols 类将方向关键字转换为枚举,我成功地解析了正确的文本. 但是,当我没有正确的文本时会出现问题.举个例子: int foo 符号表解析器将排除 'int' 类型的 'in' 部分,因此结果将是: 方向:在类型:t名称: foo ..
发布时间:2021-12-13 00:09:39 其他开发