boost-spirit相关内容

基本的增强精神语义动作无法编译

我正在尝试为ast添加一个大于运算符>:该代码与文档中的代码95%相同. 下面有两个景点 我尝试编写对大于以下内容的支持的代码块:在下面的代码中注释了. term的解析中的一行无法编译,因为我还不了解语义动作:不确定如何通过凤凰和语义动作来绑定lhs > rhs的lhs. 该解决方案对于Spirit的普通用户而言应该是微不足道的,但我仍在学习,并且到目前为止仅通过示例进行了解. ..
发布时间:2020-09-22 18:56:02 C/C++开发

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++开发

Boost.Spirit.Qi:如何使用Nabialek技巧返回属性

以下几个教程(例如 http://boost-spirit .com/home/articles/qi-example/nabialek-trick/)我想使用Nabialek技巧来实现动态解析器​​.解析已经可以正常工作,但是我无法传输属性.像 https://stackoverflow.com/a/9109972/2524462 之类的解释表明,属性应该是可能的,但不能使用参数. 这只是 ..
发布时间:2020-09-22 18:55:51 C/C++开发

Boost Spirit X3:“属性没有预期的大小" redux

似乎精神上发生了一些变化:: x3破坏了我喜欢的小asdl解析器.当我从Qi移植过来时,它工作得很好(在最初的x3错误修正进入fedora之后),但现在失败了: /usr/include/boost/spirit/home/x3/operator/detail/sequence.hpp:143:9:错误:静态断言失败:属性没有预期的大小. #include ..
发布时间:2020-09-22 18:55:49 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++开发

带有boost :: spirit解析器的编译错误

我使用boost :: spirit制作的计算器遇到了一个奇怪的问题.该计算器应该以字符串作为参数,表示一系列用逗号分隔的算术表达式,例如"a + 4 * 5,77,(b-c)* 4".它还允许字符串“?"并在这种情况下返回包含-1的数组.计算器使用SymTable初始化,SymTable是模板类参数,用于描述提供[string]-> int运算符(例如:映射)的任何类,以解析变量的值. 以 ..
发布时间:2020-09-22 18:50:08 C/C++开发

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

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

使用Boost Spirit解析命令语言

我正在为我从各种示例中拼凑而成的命令语言构建一个解析器.我已经阅读了Boost Spirit Qi和Lex文档,并且我认为我理解了基础知识,但是从阅读的内容来看,我应该避免使用属性并使用utree.我在utree上找到的文档基本上很烂.给定下面的代码,我有以下问题: 如何注释解析器以使用utree创建AST? 在构建utree后,如何走动以发现已解析的内容?例如用于仅令牌命令,例如SET ..
发布时间:2020-09-22 18:50:02 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++开发