boost-spirit相关内容

在Boost Spirit语法中获取当前行

我正在尝试使用boost spirit来获取要解析的文件的当前行.我创建了一个语法类和我的结构来解析我的命令.我还想跟踪找到命令的那一行,并将其解析到我的结构中.我将istream文件迭代器包装在multi_pass迭代器中,然后将其包装在boost :: spirit :: classic :: position_iterator2中.在我的语法规则中,如何获得迭代器的当前位置?或者这不可能吗? ..
发布时间:2021-04-16 18:31:16 C/C++开发

如何使用boost :: spirit将语法解析为std :: set?

TL; DR 如何将 boost :: spirit 语法的结果解析为 std :: set ? 完整的问题陈述 作为学习如何使用 boost :: spirit 的练习,我正在设计X.500/LDAP专有名称的解析器.可以在 RFC-1779 中以BNF格式找到语法. 我“展开"并将其翻译为 boost :: spirit 规则.那是第一步.基本上,DN是一组RDN(相对 ..
发布时间:2021-04-16 18:31:09 C/C++开发

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

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

Boost.Spirit入门指南?

我最近一直在看Boost.Spirit(Boost 1.39中包含的版本),但是仅凭文档我就感到很困惑.我正在寻找的是使用Boost.Spirit实现的玩具语言的示例-类似于小型Javascript或Lua的东西,您基本上在其中创建AST和过程.如果它仅支持函数/变量定义和基本运算符,我会很高兴,我只想看看您如何使用Boost.Spirit创建普通的AST,以及如何实现基本规则(例如标识符,声明等 ..
发布时间:2021-04-16 18:30:58 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++开发

如何结合跳过和不跳过(lexeme)规则?

我的解析器快要工作了:)(仍然让Spirit功能集(和编译时)以及非常欢迎的社区在堆栈溢出时感到惊讶) 在线尝试的小样本: http://coliru.stacked-crooked.com/a/1c1bf88909dce7e3 所以我学会了使用更多的lexeme-rules并尝试防止no_skip-我的规则较小,因此更易于阅读,但现在我坚持使用将lexeme-rules和skippi ..
发布时间:2021-04-16 18:30:46 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难以解析字符串

我正在尝试使用Boost :: Spirit解析字符串,但是我无法使其正常工作.从今天开始,我就没有使用Boost :: Spirit的经验. 该字符串由用';'分隔的命令组成.这些命令是 "INC someInteger" "BOMB firstInteger secondInteger" “将firstInteger secondInteger thirdInteger ..
发布时间:2021-04-15 20:49:03 C/C++开发

如何在AST中使用Boost Spirit自动规则?

编辑:我扩展了sehe的示例,以在我要在另一条规则上使用它时显示该问题: http://liveworkspace.org/code/22lxL7 $ 17 我正在尝试提高Boost Spirit解析器的性能,并且看到自C ++ 11起,就可以使用这样的自动规则: 自动注释="/*">>*(char_-"*/")>>"*/"; (或使用BOOST_AUTO或BOOST_SPIRIT_A ..
发布时间:2021-04-15 20:47:33 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解析为结构并重用其中的一部分

我必须在句子中找到变量并将其替换为它们的值.变量可以用不同的形式编写,例如$ varName或$(varName). 我希望拥有一个VariableHolder结构以方便地访问两者: 结构VariableHolder{字符串名称;//包含"varName"字符串fromFile;//包含"$(varName)"或"$ varName"void setName(ustring n){name ..
发布时间:2021-04-15 20:45:57 C/C++开发