boost-spirit-x3相关内容

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

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

boost::spirit::x3 属性兼容性规则,直觉还是代码?

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

将解析器从单独的翻译单元嵌入到另一个解析器中

我正在尝试将在翻译单元(unit1.h/unit1.cpp)中隔离的解析器(名为 parser1_rule )重用于另一个解析器(名称为 trace_parser ).但是我得到一个警告和一条错误消息(为便于阅读,下面进行了复制和重新格式化)或多或少(这是我的解释)指出尚未为定义(或实例化) parser1_rule 新上下文 trace_context_t . 实际上,在X3中,规则具有两 ..
发布时间:2021-04-20 19:03:22 C/C++开发

Boost Spirit x3条件(三元)运算符解析器

我需要从数学表达式构建一个抽象的语法树,以后我需要将特定于域的对象链接在一起作为计算树.我发现表达式解析器库 https://github.com/hmenke/boost_matheval 是一个很好的起点. 在我的用例中,我需要支持三元条件表达式 condition?true_exp:false_exp .到目前为止,解析器能够解析诸如 1 +(2 + abs(x))或 min(x,1 ..
发布时间:2021-04-16 18:31:26 C/C++开发

X3,什么是attr_gen?

我最终会遇到很多这些移动错误,并且除了与我解析字符串的方式有关之外,我不太确定为什么.删除所有与“虚拟"有关的内容,错误会再次出现. 有人提到使用attr_gen(无法在文档中找到它),这样做,我可以克服这些"traits :: move_to"编译错误,但是解析器仍然失败.我已经标记了为使它可以编译而添加的行,但是认为不需要用“ ..
发布时间:2021-04-16 18:31:18 C/C++开发

Spirit X3,如何获取属性类型以匹配规则类型?

为了开发Spirit X3解析器,我想使用语义动作(脚注1).对我来说,控制如何将属性存储到STL容器中很重要. 这个问题是关于如何控制解析器属性_attr(ctx)与规则类型:_val(ctx)匹配的,以便可以对其进行正确分配.也许这个问题归结为如何应用无证件 transform_attribute 功能.但是,请与我一起阅读,看看在示例代码中这是否真的可以解决我的问题. 打印对象/ ..
发布时间:2021-04-16 18:31:01 C/C++开发

使用Boost Spirit X3解析具有交替标记的Selector结构

我正在尝试解析以下结构: 结构选择器{std :: string元素;std :: string id;std :: vector类;}; 此结构用于解析形式为 element#id.class1.class2.classn 的选择器.这些选择器始终以1或不包含任何元素开头,可以包含1或不包含id,并且可以包含0到n个类. 这会变得更加复杂,因为类和id ..
发布时间:2021-04-16 18:30:55 C/C++开发

BOOST_SPIRIT_DEFINE不明白

我正在尝试使用Boost Spirit x3编写一个表达式解析器.我将新代码基于几年前用Spirit 2.x(qi)编写的旧代码(并能很好地工作). 我的代码的核心是: //为表达式创建新规则自动项=因子>>*((('*'>>因子)|('/'>>因子)));自动表达=术语>>*((('+'>>项)|('-'>>项)));auto group ='('>>表达式>>')';自动因子= lex ..
发布时间:2021-04-15 20:52:49 C/C++开发

这是定义一组递归规则的正确方法吗?

前言:我问这个问题是因为由于某种原因我无法编译我的代码.我只想知道对Spirit :: x3的不正确理解是不是 您好,我想验证一下;以下是为大量的高度递归解析器定义规则的正确方法(至少在技术上)吗?因此,对于每个解析器,我都会执行以下操作: //仅供参考,它大大简化了定义属性的过程.模板//标签是唯一的struct Access_base ..
发布时间:2021-04-15 20:51:33 C/C++开发

将Boost.Spirit.X3解析器拆分为多个TU

我又在和Boost.Spirit.X3挣扎. 我有多个逻辑分析器组(语句,表达式等),每个逻辑组由几个文件表示: group.hpp -包含用于使用的那些解析器的 typedef s, BOOST_SPIRIT_DECLARE 和 extern 变量声明“外面" group_def.hpp -包括上一个,并且包含解析器, BOOST_SPIRIT_DEFINE 等的实际定义. gr ..
发布时间:2021-04-15 20:50:56 C/C++开发

创建带有转义序列处理功能的带引号的字符串的boost :: spirit :: x3解析器

我需要为自定义语言为加引号的字符串创建一个解析器,该解析器还将正确处理转义序列,其中包括允许在字符串中使用转义引号.这是我当前的字符串解析器: x3 :: lexeme [quote>*(x3 :: char_-引用)>引用] 其中 quote 只是'“'的常量表达式.它不会处理任何转义序列.我知道 boost :: spirit :: classic:: lex_escape_ch_p ..
发布时间:2021-04-15 20:50:41 C/C++开发

自定义预期失败的完整错误消息(boost :: spirit :: x3)

boost :: spirit :: x3 错误处理实用程序允许用户选择在发生期望失败时向用户显示的内容.但是,消息的行号部分似乎并非如此,这正是我要修改的内容.因此,与其代替在第1行中打印出等.我想在其位置打印具有相同行号信息的其他消息.有谁知道我该怎么做,或者一开始是否可以修改? 编辑: 以下是直接来自 https://www.boost.org/doc/libs/1_68_0/l ..
发布时间:2021-04-15 20:46:03 C/C++开发

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

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