boost-spirit-qi相关内容

Spirit-Qi:如何编写非终结符解析器?

我想写一个可以使用的解析器(作为qi扩展)通过 my_parser(p1, p2, ...) 其中 p1, p2, ... 是 qi 解析器表达式. 实际上,我想实现一个 best_match 解析器,它的工作方式类似于 qi 替代方案,但不选择第一个匹配规则,而是选择“解释"大部分输入的规则. 给定两个规则 simple_id = +(qi::alpha) 和 complex_id ..
发布时间:2021-12-12 23:57:24 C/C++开发

提升精神语义动作参数

在这篇文章中关于提升精神语义动作 提到了 实际上还有 2 个参数正在传递:解析器上下文和一个对布尔“命中"的引用范围.解析器上下文是只有语义动作才有意义附在右侧某处手边的一条规矩.我们会看到更多很快有关这方面的信息.这布尔值可以设置为 false在语义动作内部无效回顾比赛,使解析器失败. 一切都很好,但我一直试图找到一个示例,将函数对象作为使用其他参数(解析器上下文和命中布尔值)的语义 ..
发布时间:2021-12-12 23:29:40 C/C++开发

提升精神船长问题

我在使用提升精神船长时遇到了麻烦. 我需要解析这样的文件: ROW intint [int,int]int [int,int]... 我能够毫无问题地解析它(感谢stackoverflow;)只有当我在第一个int之后添加一个'_'时. 事实上,我认为船长在第一个 int 之后吃掉了行尾,所以第一个和第二个(在第二行)看起来只有一个 int.我不明白如何保持 eol 但吃空间.我找 ..
发布时间:2021-12-01 15:02:40 C/C++开发

Boost Spirit:“语义行为是邪恶的"?

阅读和观看此演示文稿:http://boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/ 我发现了这个说法——基本上建议我们不要使用语义动作. 我必须承认,我已经有这样的感觉:具有语义动作的语法实际上看起来有点丑陋.并且,当我需要扩展/更改它们时,需要大量的“微观管理"与语义操作完全一致.演示文 ..
发布时间:2021-12-01 14:56:43 C/C++开发

Boost::spirit::qi 为空值定义计算器

我正在尝试为数学表达式编写一个解析器,其中命名变量是 boost::spirit(版本 1_51_0)中的空值,我对此完全陌生.我定义了 typedef boost::functionValue 和我的规则将像这样声明:qi::rule表达,术语,其他,...; 我用这个宏在空值上定义了二元运算符 #define BINARY_FUNCTOR(name, op) \结构名称\{ \名称(x ..

Boost.Spirit解析可选前缀

我正在尝试解析由空格分隔的,可选标记的字符串.例如 descr:expense类型:应收客户27.3 其中冒号前的表达式是标记,并且是可选的(即假定使用默认标记). 我不能完全让解析器做我想做的事情.我对规范进行了一些小的改编示例,其目的是解析键/值对(非常类似于HTTP查询字符串). typedef std :: pair ..
发布时间:2021-04-19 20:10:08 C/C++开发

我如何从本例中更改语法以解析"AND((OR(a b c))(NOT(d)))

C ++中的布尔表达式(语法)解析器 我正在尝试根据"sehe"提供的上述示例修改语法,以解析以下表达式."AND((OR(a b c))(NOt(d)))". 有三个运算符AND/OR/NOT,NOT是一元运算符,但是AND和OR可以作用于多个操作数. 谢谢 解决方案 更改后的语法实际上要简单得多,因为它避开了运算符优先级的问题.这是语法的'lisp'方法:) 尽 ..
发布时间:2021-04-16 18:31:51 C/C++开发

在boost :: spirit和std :: vectors中使用auto_表达式

我对提升::: spirit很陌生.我想将一串用逗号分隔的对象解析为std :: vector(类似于本教程中的内容).字符串可以具有不同的类型(在编译时已知):整数,例如"1,2,3" ,字符串"Apple,Orange,Banana" 等.等等.我想为所有类型提供一个统一的界面. 如果我解析单个元素,则可以使用 auto _ 表达式.向量可能有相似的界面吗?我可以定义一个规则,给定一个模 ..
发布时间:2021-04-16 18:31:47 C/C++开发

如何在错误消息“与众不同"的可能符号中增强精神?

我有一个语法,其中输入了规则集的关键字. 下面的一些伪代码..如果有人现在写"XPUBLIC",作为输入,解析器在catch处理程序中为'boost :: spirit :: qi :: expectation_failureparser :: Iterator :: what_'创建一个'distinct'异常.可以,但是解析器还可以返回此节点上可能的条目的列表.同样,on_error处理 ..
发布时间:2021-04-16 18:31:35 C/C++开发

在规则匹配后使用Spirit qi :: success回调设置字段

我正在尝试使用 qi :: on_success 回调(此处)设置一个匹配规则时的字段.下面的代码与代码略有不同,尽管我对规则/ast类的一些细微更改使它无法识别 _rule_name .我的意图在下面的代码中进行了注释.如果 _literal 规则匹配,我想将字段 term_type 设置为 TermType :: literal ,或将其设置为 Term :: rule_name _rule_ ..
发布时间:2021-04-16 18:31:32 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 Qi中使用可选的解析器

我试图解析形式为"A + C"或"A"的加法表达式.经过几次测试,我意识到问题显然出在我对可选解析器的使用上,因此可以举例说明: qi :: rule测试;测试=(qi :: string("A")[qi :: _ val = qi :: _ 1]>>-(qi :: string("B")[qi :: _ val + = qi :: ..
发布时间:2021-04-15 20:50:38 C/C++开发

解析一个“."链接的标识符列表,带有qi :: lexeme并防止空间跳过

im目前正在开发基于Spirit的表达式解析器,该解析器应最终(在很远的将来)允许类似 的表达式 "a * b * c""10 + 20 * x.y.z""a.b.c [a.b] [e.c(d.e()* 4)].e.f((a.b + 23)* d,-23 * b.e(a.b.c)).x.y" 成员访问,数组订阅,函数调用和表达式的混合使用 []->订阅()->函数调用或表达式括号.成员 ..
发布时间:2021-04-15 20:42:09 C/C++开发