boost-spirit-qi相关内容
“Difference”解析器可以由二元-(减号)运算符创建: rule = qi::char_ - qi::lit("}}") 甚至复合差异: rule = qi::char_ - qi::lit("}}") - qi::lit("]]") 但是如何在分析时生成差异分析器的全部结果? 我猜可能是某种形式,如下所示: phoenix::function
..
我在业余时间开发我的代码.最好在调试模式下.最近,当我尝试构建发布版本时,我得到了错误(运行时,输出:1\n2\n 然后失败).我找到了包含错误的一段代码(如下),我发现只有在优化级别为 -Os、-Ofast、-O2、-O3 而不是 -O、-O0、-O1、-Og.在发布模式下,我的调试能力受到限制.错误的原因是什么?发现此类错误的方法是什么? #!/usr/bin/env bash -vex
..
最近我正在寻找一种方法来替换字符串中的标记,这基本上是查找和替换(但至少有一种额外的方法可以解决这个问题)并且看起来像是相当平庸的任务.我带来了几个可能的实现,但从性能的角度来看,它们都不令人满意.最好的成就是每次迭代约 50us.这种情况很理想,字符串的大小从未增长过,最初我省略了不区分大小写的要求 这是 Coliru 的代码 我的机器上的结果: Boost.Spirit 符号结果:34
..
我正在为从各种示例中拼凑而成的命令语言构建解析器.我读过 Boost Spirit Qi 和 Lex 文档,我想我了解基础知识,但从我读过的内容来看,我应该避免使用属性并使用 utree.我在 utree 上找到的文档基本上很烂.鉴于下面的代码,我有以下问题: 如何注释解析器以使用 utree 创建 AST? 如何在 utree 构建后遍历它,以发现解析的内容?例如对于仅令牌命令,例如 S
..
我正在尝试使用 boost.spirit 的 qi 库解析某些内容,但遇到了一个问题.根据 精神文档, a >>b 应该产生类型为 tuple 的东西.但这是一个 boost::tuple(又名融合向量),而不是 std::tuple(我想要的). 有没有什么简单的方法可以在 boost::tuple => std::tuple 之间进行这种转换? 同一个文档页面说 *a 应该产生类型
..
我必须使用 boost::spirit 进行解析,我想使用phrase_parse 函数: qi::phrase_parse(str.begin(), str.end(), 语法, ascii::space - qi::eol); 但是我的编译器不允许第四项(ascii::space - qi::eol).如何在不跳过 eol 的情况下使用船长 ascii::space ? 解决方案
..
我想解析一个包含以下结构的文件: 一些垃圾*&%第 1 节 {部分内容}第2节{部分内容} 解析section_name1 { ... } section_name2 { ... } 的规则已经定义: section_name_rule = lexeme[+char_("A-Za-z0-9_")];section = section_name_rule >点亮(“{")>/*一些复杂的事情*
..
我正在尝试在使用 boost::spirit 解析时创建具有语义规则的 AST.AST 必须只为输入的一部分构建,输入的另一部分应该在没有语法树的情况下进行解析. 例如,对于这样的输入字符串:“self.usedFoo(Bar).filter(self.baz > baz)"或“self.Foo.filter(true)">)" AST 应该只为粗体部分构建. 还有一个问题:解析器运行
..
我已经问过关于这个问题的问题.但由于没有答案,我现在再次询问完整的可编译源代码片段. 由于 boost::variant 移动语义的一些问题,此代码片段应在不使用 std=c++11 选项的情况下进行编译.只是'g++ -Wall -pedantic'. 在此代码片段中,您将找到“//Comment here"行.您可以评论以下块,直到“//And here -----".如果取消注释
..
我正在尝试将一个简单的命令行解析器与 SPIRIT 放在一起,而没有语义操作.我正在使用 BOOST 1.52,但我想避免使用 C++11 功能.语法具有以下语法: [-p num1] [-j] [--jobs num2] str1 str2 可选参数可以是任意顺序.我只成功解析了可选参数.一旦我添加了额外的强制性两个字符串解析器,它就会中断.即使我尝试明确写下“rstart"属性并避免使用“
..
这不会编译(下面的代码). 这里还有另一个问题,也有同样的错误.但我不明白答案.我已经尝试在某些地方插入 qi::eps -- 但没有成功. 我还尝试为所使用的类型添加元函数(boost::spirit::raits::is_container)——但这也无济于事. 我还尝试使用包含我需要在任何地方使用的所有类型的相同变体.同样的问题. 有没有人让这个词法分析器返回除 do
..
可以通过二进制-(减号)运算符创建“差异"解析器: rule = qi::char_ - qi::lit("}}") 甚至复合差异: rule = qi::char_ - qi::lit("}}") - qi::lit("]]") 但是我怎么能在解析时生成差异解析器的整个结果? 我猜它可能是某种形式,如下所示: phoenix::function差异解析器;规则 = qi::lazy(
..
我的目标是让我的 qi::grammar 返回一个属性.不过,我在使用 spirit::lexer 时遇到了很大的困难. 我希望使用下面给定的语法,如果我用 spirit::qi::parse(begin, end,grammar, output); 调用它,structident 输出 将包含已解析词素的内容. 错误似乎主要是从这一行流出:start %= lexer.identif
..
我看过一些与 qi 语法中关键字/标识符使用的细微差别相关的帖子,但我不太明白 boost 示例中演示的方法应该如何工作...... 关键字声明: qi::symbols关键词; 示例关键字集: keywords.add(“富")(“酒吧"); 标识符规则声明: qi::rule标识符; 以下是 qi calc 和编译器示例中标识符规则的定义方式: identifier = !
..
我正在寻找一种将字符串解析为 int 或 double 的方法,解析器应该尝试两种选择并选择匹配输入流最长部分的那个. 有一个已弃用的指令 (longest_d) 完全符合我的要求: number =longest_d[ 整数 |真实的 ]; ...既然已弃用,还有其他选择吗?如果有必要实施语义操作来实现所需的行为,有人有建议吗? 解决方案 首先,切换到 Spirit V2 -
..
你能帮我理解 a % b 解析器和它扩展的 a >> 之间的区别吗?*(b >> a) 形式在 Boost.Spirit 中?即使参考手册 表示它们是等价的, 列表运算符 a % b 是一种二元运算符,它匹配由 ba 的一个或多个重复的列表代码>.这相当于 a >>*(b >> a). 以下程序会根据使用的程序产生不同的结果: #include #include #include #
..
我希望我的基于 boost::spirit 的解析器能够解析文件,将解析的规则转换为不同的类型,并发出一个包含它找到的所有匹配项的向量.所有作为属性发出的类型都应该从基类型继承,例如: #include #include #include #include 结构体命令库{虚拟无效 commandAction(){std::cout
..
我有一个使用 Boost::Spirit 的非常简单的解析器: 规则zeroTo255 = (string("25") >> char_('0', '5'))|(char_('2') >> char_('0', '4') >> 数字)|(char_('1') >> repeat[2](digit))|(char_('1', '9') >> 数字) |数字; 当我尝试解析时 std::stri
..
我正在尝试解析以下语法序列: .例如: 浮点 foo 方向可以是in、out或in_out.通过使用 qi::symbols 类将方向关键字转换为枚举,我成功地解析了正确的文本. 但是,当我没有正确的文本时会出现问题.举个例子: int foo 符号表解析器将排除 'int' 类型的 'in' 部分,因此结果将是: 方向:在类型:t名称: foo
..
我想解析一个浮点数,但不允许 NaN 值,所以我生成了一个继承自默认策略的策略,并用它创建了一个 real_parser: //使用 boost::spirit::qi::{real_parser,real_policies,//短语解析,double_,char_};模板 struct no_nan_policy : real_policies{模板
..