boost-spirit-x3相关内容

如何更改规则的解析器

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

Boost Spirit X3的生产准备就绪了吗?

我正在将手写的解析器迁移到Boost.Spirit(2.5.4).第一印象是积极的,但是由于我使用的是C ++ 17,因此X3似乎是一个非常有吸引力的选择. 幸运的是,有关X3的资源很多: 许多有关Stackoverflow上X3的问题 关于在YouTube上有关X3的视频 一个在线文档 但是: Boost.Org上没有任何内容,给人的印象是,尽管Spirit X3是Bo ..
发布时间:2020-09-22 18:56:05 其他开发

Spirit.X3中的递归规则

我想使用Boost.Spirit x3解析递归语法,但是由于模板实例化深度问题而失败. 语法如下: value: int | float | char | tuple int: "int: " int_ float: "float: " real_ char: "char: " char_ tuple: "tuple: [" value* "]" 以下是一个包​​含的示例: ..
发布时间:2020-09-22 18:55:58 C/C++开发

振作精神; Qi或X3?

我正在和一个朋友一起为一个小型个人项目做口译;我们开始实现所有类和通用结构,在这些类和通用结构中,代码将被翻译然后执行,只是将实际的解析代码推迟到这些结构中. 现在我们必须构建解析器,经过一番搜索,我发现各地到处都是谈论Spirit Qi和Spirit X3的帖子和人们,好像他们(我认为是)两种不同的解析器制作方式一样,但是没有人说这种差异,哪一种是最近的,我应该从哪一种开始. 目的是 ..
发布时间:2020-09-22 18:55:43 其他开发

在运行时合并规则并返回规则

我正在尝试编写一些在Spirit-X3之上构建的复杂解析器,所以我需要了解一些事情: ♦如何在运行时合并规则. (有纳比亚力克的把戏) ♦返回这样的规则是否可以: x3::rule SomeFunction(std::string &str) { x3::rule foo; auto bar = baz; BOOST_SPIRIT_ ..
发布时间:2020-09-22 18:53:36 C/C++开发

X3解析规则无法编译

我正在通过编写解析器来解析NAMS使用的十六进制数的两个变体来学习Boost Spirit: 后缀为0x/0h或前缀为h/x的十六进制数字. 以$为前缀的十六进制数字,并且必须后跟十进制数字. 以下是我到目前为止提出的内容,以及 Coliru会议: //#define BOOST_SPIRIT_X3_DEBUG #include #include ..
发布时间:2020-09-22 18:51:15 C/C++开发

Spirit X3:具有内部状态的解析器

我想有效地解析大型CSV格式的文件,这些文件在运行时会获得列的顺序.使用Spirit Qi,我将使用lazy辅助解析器解析每个字段,该辅助解析器将在运行时选择将哪个列特定的解析器应用于每个列.但是X3似乎没有lazy(尽管它是最终效果非常好,但是现在我注意到我真的不需要在自定义解析器本身之外的任何地方公开pos变量.我尝试将其放入自定义解析器本身,并开始出现编译器错误,指出column_value ..
发布时间:2020-09-22 18:50:04 C/C++开发

Spirit X3,这种错误处理方法有用吗?

在我相信X3中的错误处理主题还有一些改进的余地.从我的角度来看,一个重要的目标是提供有意义的错误消息.首先,最重要的是添加一个将_pass(ctx)成员设置为false的语义动作不会这样做,因为X3会尝试匹配其他内容.仅抛出x3::expectation_failure会过早退出解析功能,即不尝试匹配其他任何内容.因此,剩下的就是解析器指令expect[a]和解析器operator>以及从语义动作 ..
发布时间:2020-09-22 18:49:59 C/C++开发

x3语法中无用的编译器错误

以下用于简单机器人命令语言的Spirit x3语法在Windows Visual Studio 17中生成编译器错误.对于此项目,我需要将警告级别编译为4(/W4),并将警告视为错误(/WX). ). 警告C4127条件表达式为 常量SpiritTest e:\ data \ boost \ boost_1_65_1 \ boost \ spirit \ home \ x3 \ char \ ..
发布时间:2020-09-22 06:22:10 C/C++开发

可能因“初始化后"失败的eps解析器.可能会失败

我正在阅读 Boost X3快速入门教程,并注意到线 eps是一种特殊的精神分析器,它不消耗任何输入,但始终会成功.我们使用它来初始化规则的综合属性,然后将其初始化为零. [...]以这种方式使用eps非常适合进行初始化之前和之后的初始化. 现在,我不禁想知道eps_that_might_fail在解析后的输入的一部分上进行某种语义/后分析是否有用,这可能会失败,使内部具有某种检查的局 ..
发布时间:2020-09-22 05:42:41 C/C++开发

带有单独TU的x3链接器错误

随着解析器的增长,我将一些规则分为不同的翻译单元(TU),链接器问题随之而来.经过数周的尝试和失败尝试之后,我将约50条规则简化为此处(希望如此)的最小示例.我已经阅读了相关的在使用boost-spirit的单独解析器中链接错误x3 并检查,我在上下文typedef iso8859_1::space_type上使用了该函数,并稍后调用了iso8859_1::space.另外,我也不让编译器推断出i ..
发布时间:2020-09-22 05:34:07 C/C++开发