boost-spirit-x3相关内容
将我的代码从QI更改为X3,并使用BOOST_FUSION_ADAPT_ADT遇到编译错误.我尝试了增强1.64和1.67,但它们都不起作用.我修改了Spirit X3示例rexpr_min,将getter和setter添加到struct rexpr,将BOOST_FUSION_ADAPT_STRUCT更改为BOOST_FUSION_ADAPT_ADT,并且编译也失败. 环境: ubu
..
鉴于以下正确解析的x3语法,我想添加参数,限定词和属性的验证.这似乎表明了一种在各种规则中动态切换正在使用哪个符号表的方法.实现此目的的最佳方法是什么?这似乎是语义动作和属性的某种混合,但我不清楚如何实现. #include #include #include #include #include #i
..
我正在关注boost网站上的x3文档,并且我尝试使用后面的注释示例中解释的内容来扩展有关如何组织代码的示例. 编译项目时(使用g ++或MSVC)时出现以下错误: 错误:没有匹配的函数可以调用'boost :: spirit :: x3 :: unused_type :: get()' 在函数on_success的第一行中,以下代码: // tag used to get the
..
从Boost Spirit X3教程中: 首先,让我们创建一个表示员工的结构: namespace client { namespace ast { struct employee { int age; std::string surname; std::string forename; double salary;
..
我正在考虑永远写本质上是我的第一个解析器(=自从我最忘记的Uni编译器类以来). 自从我使用C ++以来,我一直在考虑使用Boost Spirit.然后我注意到有一个“常规" 2.5.2,还有一个名为Spirit X3的代码的神奇子集. 我还注意到,Boost Spirit X3已于2年前宣布/讨论/预发布,但Boost Spirit的正式版本是2.5.2.最后,我读到: boo
..
如何创建一个规则,以读取3组中的整数,即... 1 2 3 OK, 1 set of 3 ints 1 2 3 4 5 6 OK, 2 sets of 3 ints 1 2 3 4 5 ERROR, 1 set of 3 ints, 1 short for 2nd 1 2 3 4 5 6 7 8 9
..
我正在努力编写一个标识符解析器,该解析器解析不是关键字的字母数字字符串. 关键字全部在表格中: struct keywords_t : x3::symbols { keywords_t() { add("for", x3::unused) ("in", x3::unused)
..
我有这个Spirit X3解析器 auto xyz_def = x3::omit[x3::int_] >> x3::eol >> (x3::lexeme[+(x3::char_ - x3::eol)]) >> x3::eol >> (*(chemical::parser::atom >> x3::eol) ; 毫无疑问地
..
此问题是 中问题的后续问题 Boost Spirit x3条件(三元)运算符解析器 原始问题上下文没有显示ast属性(我不好!),因此答案无法考虑所有活动部分.现在,该问题说明ast属性的外观以及如何使用ast通过符号表评估表达式. 因此,后续的问题是正确拼写的三元条件应该如何改变ast类型以及条件和表达式如何相互作用(根据我的理解,它现在不属于x3 :: variant的一部分)从主
..
尝试生成一个像雇员示例这样的AST,它不仅包含雇员.以我目前的心态,RExpressions示例并没有帮助我.我没有编译示例,但是据我所知,我在员工示例中添加了团队,部门和公司. 我的问题是要了解如何将不同的结构添加到变体中,以及如何将变体添加到phrase_parse中. 在此示例中,可能有多条相同的线紧挨着.因此想知道是否需要进行AST递归. #include
..
我将语法分解为推荐的parser.hpp,parser_def.hpp,parser.cpp文件后,遇到了boost spirit x3的奇怪行为. 我的示例gramar解析了一些简单的枚举: enum = "enum" > identifier > "{" > identifier % "," > "} 这是我的枚举语法. 当我不将枚举和标识符解析器拆分为推荐的文件时,一切正常,尤其是
..
我目前仍在尝试使用Boost Spirit x3解析规则. 这是我试图解析的EBNF(使用Spirit中的%运算符获取列表): type ::= class_type | lambda_type lambda_type ::= more_arg_lambda | one_arg_lambda more_arg_lambda ::= "(", type%",", ")", "=>", ty
..
我有一个解析器,用于解析像foo, bar, baz这样的标识符,还有一个解析器,也用于解析像foo::bar, foo::bar.baz, foo::bar.baz.baham这样的嵌套标识符 它们都解析为相同的ast结构,如下所示: struct identifier : x3::position_tagged{ std::vector namespa
..
我是currentyl,试图使用BOOST_SPIRIT_DEFINE/DECLARE/INSTANTIATE将我的boost spirit x3解析器分成不同的_def和.cpp文件,但是我一直收到链接错误. 这里是我的解析器,它是分开的. 读取链接器错误 :(.text.startup+0xbb): undefined reference to `bool
..
我使用 boost :: spirit :: x3 解析键值对(类似于HTTP标头)。当比较手写解析器的性能时, boost :: spirit :: x3 比那个慢10%。 我使用boost 1.61和GCC 6.1: $ g ++ -std = c ++ 14 -O3 -I / tmp / boost_1_61_0 / boost / main.cpp&&& ./a.out
..
在我的我上一个问题中,建议我的 boost :: spirit :: x3 解析器的性能可以通过解析为 boost :: string_view 使用 raw 指令。 但是,我无法编译。 这是我发现的: 之前 x3 ,则必须专门处理 assign_to_attribute_from_iterators (请参阅此SO回答 )来处理 raw 指令。 x3 现在使用 move_to
..
这是 此问答 的后续跟进。我现在有一个命名空间ast 中的几个数据结构,细分为两个子命名空间(代数和 命名空间ast {c> numeric namespace algebraic { struct occupance { char pc; char col; int row; }; using pieces = std :: vector
..
使用 Boost.Spirit X3 ,我想解析一个逗号将范围和单个数字的单独列表(例如,1-4,6,7,9-12)分成单个 std :: vector 。这是我想出的: 命名空间ast { struct range { int first_,last_; }; using expr = std :: vector
..
有什么地方描述了各种spirit :: x3规则定义操作如何影响属性兼容性? 我很惊讶于: x3 :: lexeme [x3 :: alpha> *(x3 :: alnum | x3 :: char _('_'))] 移动到融合适应的结构: struct Name { std :: string value; }; 暂时,我摆脱了第一
..
有什么地方描述了各种spirit :: x3规则定义操作如何影响属性兼容性? 我很惊讶于: x3 :: lexeme [x3 :: alpha> *(x3 :: alnum | x3 :: char _('_'))] 移动到融合适应的结构: struct Name { std :: string value; }; 暂时,我摆脱了第一
..