boost-spirit相关内容

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

更新 此问题涉及两个问题(如接受的答案所示),这两个问题都存在于该版本中带有Boost 1.64的Boost Spirit X3的更新,但在撰写本文时(2017-04-30),现在两者都已在developer分支中固定(或至少在编译时检测到). 我已经更新了 mcve项目,以反映我为使用开发分支所做的更改的最新增强版本,希望它可以帮助面临其他类似问题的其他人. 原始问题 在 ..

解析一个“."链接的标识符列表,带有qi :: lexeme并防止空间跳过

im目前正在开发基于Spirit的表达式解析器,该解析器应最终(在很远的将来)允许类似 的表达式 "a * b * c""10 + 20 * x.y.z""a.b.c [a.b] [e.c(d.e()* 4)].e.f((a.b + 23)* d,-23 * b.e(a.b.c)).x.y" 成员访问,数组订阅,函数调用和表达式的混合使用 []->订阅()->函数调用或表达式括号.成员 ..
发布时间:2021-04-15 20:42:09 C/C++开发

Boost Spirit Lexeme与No_Skip

就像 Boost.Spirit ,lexeme和no_skip之间的唯一区别是pre_skip. 但是经过一些测试,我仍然对pre_skip的确切含义感到困惑. 那么什么样的条件会有所作为,也许一个例子可以帮助我更好地理解它. 谢谢! 解决方案 预跳过会忽略表达式开头的空格. 对比: 在Coliru上直播 #include ..
发布时间:2021-04-15 20:42:06 C/C++开发

使用utf-32解析器在Boost.Spirit中处理utf-8

我有类似的问题,例如如何使用boost :: spirit解析UTF-8?和如何将Unicode字符与boost进行匹配:: spirit?,但是这些都不能解决我面临的问题.我有一个带有UTF-8字符的 std :: string ,我用 u8_to_u32_iterator 包裹了 std :: string 并使用了unicode 终端,例如: BOOST_NETWORK_INLINE v ..
发布时间:2021-04-15 20:41:02 C/C++开发

提升平凡语法的编译错误

我正在尝试使用以下规则编译解析器: else_statement = lit(“ else” )>声明; if_statement = lit(“ if”)>> ‘(’>>表达式>>’)’>>陈述>> -else_statement; else_statement 的属性为声明,以及它使用的声明规则。 if_statement 的属性是一个结构,其成 ..
发布时间:2020-09-27 23:48:43 其他开发

如何使用qi创建通用解析器?

我正在尝试使用qi创建通用解析器元素,因为我不幸(必须支持MSVC)无法使用X3. 这个想法是要有一个模板化的结构: template struct parse_type; 我可以这样使用: template T from_string(std::string const& s) { T res; parse_type t; ..
发布时间:2020-09-22 19:01:49 C/C++开发

如何更改规则的解析器

是否可以在运行时修改规则的解析器?我能够动态创建解析器(派生自parser_base的类),但是我不知道如何将新的解析器分配给现有规则. 基本上,我的问题是我想为由数字(如在我的所有解析器输入中不变的意义上称它们为常量)和符号(我想要的变体)这样的元素组成的行定义一个解析器使用动态解析器​​方法捕获).由于这些符号基于运行时的当前环境,因此我认为我需要一个动态解析器​​. 最小的问题, ..
发布时间:2020-09-22 19:01:45 C/C++开发

增强精神:类似于排列,但不完全相同

我正在尝试掌握Spirit,这意味着我对此很陌生(因此,请期待下面缺少适当的术语). 我必须解析这个: value1 = 10 value2 = 20 value3 = 30 value4 = 40 顺序无关紧要,但是每个"value1" ..."value4"行必须恰好出现一次.这样就可以了: value1 = 10 value4 = 40 value2 = 20 valu ..
发布时间:2020-09-22 19:01:39 其他开发

PEG规则识别功能原型

我正在尝试创建一个可以解析C代码的解析器.我的用例分析可能包含函数原型的缓冲区.我想将此函数名称推送到符号表中.我是Spirit和PEG的新手,我试图弄清楚如何编写可以识别功能原型的规则. 这是我当前的实现方式: auto nameRule = x3::alpha >> *x3::alnum; auto fcnPrototypeRule = nameRule >> *nameRule; ..
发布时间:2020-09-22 19:01:35 C/C++开发

解析成类(不是结构)

在下面,我显示了一个未编译的精神雇员示例.我要解决的问题是解析为类而不是结构.我知道,除了公共/私营部门之外,其他方面都是相同的.但是在将类/结构存储到向量中之前,我需要有一个构造函数来工作.如何更改BOOST_FUSION_ADAPT_STRUCT? 如何使它运行? // STD HEADER #include #include #includ ..
发布时间:2020-09-22 19:01:31 C/C++开发

如何使boost :: spirit解析器和lexer能够处理包含文件

这是什么都不做的词法分析器-它返回读取的字符串. 我希望对此进行扩展,以便能够处理类似C ++的include语句. 我可以想象如何做到这一点-但我想知道是否存在一些更简单或已经可用的方法. 如果必须这样做,我将实现自己的迭代器(传递给词法分析器).该迭代器将包含 字符串索引(可能使用-1表示end()迭代器) 指向此字符串的指针 词法分析器在遇到一些include语句时会将文件插入 ..
发布时间:2020-09-22 19:01:30 C/C++开发

不使用船长就可以增强精神分析

考虑一个预处理器,它将读取原始文本(没有明显的空白或标记). 有3条规则. resolve_para_entry应该在调用中解决参数.顶级文本作为字符串返回. resolve_para应该解析整个参数列表,并将所有顶级参数放在字符串列表中. resolve是条目 在跟踪迭代器并获取文本部分的方式上 样品: sometext(para)→在字符串列表中期望p ..
发布时间:2020-09-22 19:01:27 C/C++开发

Boost Spirit像语法一样解析XML

我有以下代码要修改,但是我对Boost-spirit完全陌生. 我知道RE是精打细算的,但不知道该怎么做. 这是解析器. Parser() : Parser::base_type(root) { braces = lit('{') >> *(iso8859_1::space) >> lit('}'); str = lexeme[lit('"') >> raw[ ..
发布时间:2020-09-22 19:01:19 C/C++开发

使用特征来解析boost :: spirit中的日期

我一直在解析包含日期的日志文件并将其存储为字符串,但这会占用大量内存,并且由于分配了字符串而导致的开销很大. 建议我使用时间戳记存储日期,并使用增强精神流对其进行解析,因此我尝试使用"boost :: posix_time :: ptime"和旧的"std :: time_t + std :: get_time",但它们都会严重损害性能. 我想尝试一下这种新方法:将日期解析为纯整数,然 ..
发布时间:2020-09-22 19:01:17 其他开发