boost-spirit相关内容

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::x3 属性兼容性规则,直觉还是代码?

是否有文档描述了各种 Spirit::x3 规则定义操作如何影响属性兼容性? 我很惊讶: x3::lexeme[ x3::alpha >*(x3::alnum | x3::char_('_')) ] 无法移动到融合适应的结构中: 结构名称{std::string 值;}; 暂时去掉了第一个强制字母,但我还是想表达一个规则,定义名称字符串必须以字母开头.这是我需要尝试添加 eps 直到 ..
发布时间:2021-12-24 15:26:00 C/C++开发

C++ Boost qi递归规则构建

[看来我的解释和期望都不是很清楚,所以我在帖子末尾添加了我希望如何使用该功能的精确性] 我目前正在使用 boost qi 研究语法.我有一个规则的循环构造,因为我需要从向量的元素构建它.我用简单的类型重写了它,它看起来像: #include //使用 boost 1.43.0#include #include #include 命名空间 bqi = boost::spirit::qi;ty ..
发布时间:2021-12-24 15:25:53 其他开发

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

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

Boost Spirit x3:解析为结构体

来自 Boost Spirit X3 教程: 首先,让我们创建一个代表员工的结构体: namespace client { namespace ast{结构员工{年龄;std::string 姓氏;std::string 名;双薪;};}} 然后,我们需要将我们的员工结构告诉 Boost.Fusion 以使其成为语法可以利用的一流融合公民. BOOST_FUSION_ADAPT_STR ..
发布时间:2021-12-24 15:24:15 C/C++开发

boost::spirit::lex & 问题空白

我尝试学习使用 boost::spirit.为此,我想创建一些简单的词法分析器,将它们组合起来,然后开始使用精神进行解析.我尝试修改示例,但它没有按预期运行(结果 r 不正确). 这是词法分析器: #include 命名空间 lex = boost::spirit::lex;模板 struct lexer_identifier : lex::lexer{lexer_identifier() ..
发布时间:2021-12-24 15:17:50 C/C++开发

Boost::Spirit::QI 解析器:解析元素的索引

是否可以(使用 Boost::Spirit::QI)从逗号分隔的字符串中解析数字,以便获得每个解析数字的索引? 假设我有一个字符串 "23,123,65,1" 并且我想将这些数字中的每一个插入到给定位置 (0, 1, 2, 3) 的矩阵中.一种方法是将数字解析为 std::vector,然后将它们复制到矩阵行,但速度不是特别快. 目前我正在使用矢量变体: 矩阵数据(10, 4);整数 ..
发布时间:2021-12-24 15:17:35 C/C++开发

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

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

从可选解析器表达式的可变参数列表生成 Spirit 解析器表达式

我正在寻找实现可变参数函数的最简单方法,该方法接受 boost::spirit::qi 规则列表并将列表扩展为格式表达式:rule1 |规则 2 |rule3 |.... 让我们假设规则不合成任何属性.非常感谢您的帮助. #include #include #include #include #include 命名空间 qi = boost::spirit::qi;命名空间 ph = boost ..

理解 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 其他开发

Spirit-Qi:如何编写非终结符解析器?

我想写一个可以使用的解析器(作为qi扩展)通过 my_parser(p1, p2, ...) 其中 p1, p2, ... 是 qi 解析器表达式. 实际上,我想实现一个 best_match 解析器,它的工作方式类似于 qi 替代方案,但不选择第一个匹配规则,而是选择“解释"大部分输入的规则. 给定两个规则 simple_id = +(qi::alpha) 和 complex_id ..
发布时间:2021-12-12 23:57:24 C/C++开发

提升精神语义动作参数

在这篇文章中关于提升精神语义动作 提到了 实际上还有 2 个参数正在传递:解析器上下文和一个对布尔“命中"的引用范围.解析器上下文是只有语义动作才有意义附在右侧某处手边的一条规矩.我们会看到更多很快有关这方面的信息.这布尔值可以设置为 false在语义动作内部无效回顾比赛,使解析器失败. 一切都很好,但我一直试图找到一个示例,将函数对象作为使用其他参数(解析器上下文和命中布尔值)的语义 ..
发布时间:2021-12-12 23:29:40 C/C++开发

如何在 C++ 中快速解析空格分隔的浮点数?

我有一个包含数百万行的文件,每行有 3 个以空格分隔的浮点数.读取文件需要很多时间,所以我尝试使用内存映射文件读取它们才发现问题不是IO的速度而是解析的速度. 我目前的解析是取流(称为文件)并执行以下操作 float x,y,z;文件 >>x>>y>>z; Stack Overflow 中有人推荐使用 Boost.Spirit,但我找不到任何简单的教程来解释如何使用它. 我试图找到 ..
发布时间:2021-12-12 23:16:27 C/C++开发