boost-spirit相关内容
我正在尝试为ast添加一个大于运算符>:该代码与文档中的代码95%相同. 下面有两个景点 我尝试编写对大于以下内容的支持的代码块:在下面的代码中注释了. term的解析中的一行无法编译,因为我还不了解语义动作:不确定如何通过凤凰和语义动作来绑定lhs > rhs的lhs. 该解决方案对于Spirit的普通用户而言应该是微不足道的,但我仍在学习,并且到目前为止仅通过示例进行了解.
..
我想使用Boost.Spirit x3解析递归语法,但是由于模板实例化深度问题而失败. 语法如下: value: int | float | char | tuple int: "int: " int_ float: "float: " real_ char: "char: " char_ tuple: "tuple: [" value* "]" 以下是一个包含的示例:
..
我正在尝试使用Boost 1.65.1中的Spirit X3来创建解析器.我已将问题简化为以下具有更简单结构的较小示例: #include #include #include #inclu
..
以下几个教程(例如 http://boost-spirit .com/home/articles/qi-example/nabialek-trick/)我想使用Nabialek技巧来实现动态解析器.解析已经可以正常工作,但是我无法传输属性.像 https://stackoverflow.com/a/9109972/2524462 之类的解释表明,属性应该是可能的,但不能使用参数. 这只是
..
似乎精神上发生了一些变化:: x3破坏了我喜欢的小asdl解析器.当我从Qi移植过来时,它工作得很好(在最初的x3错误修正进入fedora之后),但现在失败了: /usr/include/boost/spirit/home/x3/operator/detail/sequence.hpp:143:9:错误:静态断言失败:属性没有预期的大小. #include
..
我将一系列文本输入到sip解析器中.第一个花费最长时间,无论哪个是第一个.我想知道当spirit :: lex进行第一个解析时是否有任何初始化工作? template struct sip_token : lex::lexer { sip_token() { this->self.add_pattern
..
我正在和一个朋友一起为一个小型个人项目做口译;我们开始实现所有类和通用结构,在这些类和通用结构中,代码将被翻译然后执行,只是将实际的解析代码推迟到这些结构中. 现在我们必须构建解析器,经过一番搜索,我发现各地到处都是谈论Spirit Qi和Spirit X3的帖子和人们,好像他们(我认为是)两种不同的解析器制作方式一样,但是没有人说这种差异,哪一种是最近的,我应该从哪一种开始. 目的是
..
转到 boost :: spirit :: qi :: symbols文档,我认为从语义动作向qi :: symbols添加符号并不难.不幸的是,它似乎没有我想象的那么简单. 下面的测试代码出现了问题: #define BOOST_SPIRIT_USE_PHOENIX_V3 #include #include
..
在boost :: spirit中,我添加了基于示例罗马字的错误处理代码. #include #include #include #include
..
我正在尝试编写一些在Spirit-X3之上构建的复杂解析器,所以我需要了解一些事情: ♦如何在运行时合并规则. (有纳比亚力克的把戏) ♦返回这样的规则是否可以: x3::rule SomeFunction(std::string &str) { x3::rule foo; auto bar = baz; BOOST_SPIRIT_
..
我正在通过编写解析器来解析NAMS使用的十六进制数的两个变体来学习Boost Spirit: 后缀为0x/0h或前缀为h/x的十六进制数字. 以$为前缀的十六进制数字,并且必须后跟十进制数字. 以下是我到目前为止提出的内容,以及 Coliru会议: //#define BOOST_SPIRIT_X3_DEBUG #include #include
..
需要为std :: pair对象提供类型为boost :: variant的对象的值.您将如何使用其他资源来实现这个想法?除此以外,还有其他方法吗? struct aggr_pair_visitor : public ::boost::static_visitor { public: explicit aggr_pair_visitor(
..
我使用boost :: spirit制作的计算器遇到了一个奇怪的问题.该计算器应该以字符串作为参数,表示一系列用逗号分隔的算术表达式,例如"a + 4 * 5,77,(b-c)* 4".它还允许字符串“?"并在这种情况下返回包含-1的数组.计算器使用SymTable初始化,SymTable是模板类参数,用于描述提供[string]-> int运算符(例如:映射)的任何类,以解析变量的值. 以
..
我有以下MWE: #include #include #include #include namespace spirit = boost
..
我想有效地解析大型CSV格式的文件,这些文件在运行时会获得列的顺序.使用Spirit Qi,我将使用lazy辅助解析器解析每个字段,该辅助解析器将在运行时选择将哪个列特定的解析器应用于每个列.但是X3似乎没有lazy(尽管它是最终效果非常好,但是现在我注意到我真的不需要在自定义解析器本身之外的任何地方公开pos变量.我尝试将其放入自定义解析器本身,并开始出现编译器错误,指出column_value
..
我正在为我从各种示例中拼凑而成的命令语言构建一个解析器.我已经阅读了Boost Spirit Qi和Lex文档,并且我认为我理解了基础知识,但是从阅读的内容来看,我应该避免使用属性并使用utree.我在utree上找到的文档基本上很烂.给定下面的代码,我有以下问题: 如何注释解析器以使用utree创建AST? 在构建utree后,如何走动以发现已解析的内容?例如用于仅令牌命令,例如SET
..
在我相信X3中的错误处理主题还有一些改进的余地.从我的角度来看,一个重要的目标是提供有意义的错误消息.首先,最重要的是添加一个将_pass(ctx)成员设置为false的语义动作不会这样做,因为X3会尝试匹配其他内容.仅抛出x3::expectation_failure会过早退出解析功能,即不尝试匹配其他任何内容.因此,剩下的就是解析器指令expect[a]和解析器operator>以及从语义动作
..
我正在尝试编写boost :: spirit :: x3解析器,该解析器而不是生成子字符串(例如),而是在源文件中生成匹配字符串的偏移量和长度. 我尝试了on_success处理程序,语义操作的各种组合,但没有真正起作用. 给定: ABC\n DEFG\n HI\n 我想要一个生成包含以下内容的std::vector>
..
我想创建一个语法和词法分析器来解析以下字符串: 100 reason phrase 正则表达式将为:"\ d {3} [^ \ r \ n] *" 令牌定义: template struct custom_tokens : lex::lexer { custom_tokens() { this->
..
以下用于简单机器人命令语言的Spirit x3语法在Windows Visual Studio 17中生成编译器错误.对于此项目,我需要将警告级别编译为4(/W4),并将警告视为错误(/WX). ). 警告C4127条件表达式为 常量SpiritTest e:\ data \ boost \ boost_1_65_1 \ boost \ spirit \ home \ x3 \ char \
..