问题标签 [boost-spirit-karma]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
333 浏览

c++ - How is it possible to pass attributes to child rules in boost spirit karma

I am parsing text into an AST via qi and generates text again via karma. This is working as expected, but wants some method to pass on an attribute from one rule to another.

Ported from the comments:

Current Code On Coliru

It prints

But I'd prefer it to print

Is this possible, and how?

0 投票
1 回答
97 浏览

boost - 提升精神业力相当于齐火柴

boost::spirit::karma 中的 boost::spirit::qi::matches 等价于什么?例如,只有当布尔标志设置为真时,我才想生成一个文字“数组”。

0 投票
1 回答
292 浏览

c++ - Boost.Spirit.Karma 设置精度

我开始使用 Karma 生成功能将 double 转换为 char 并具有类似 sprintf 的功能。为此,我使用以下示例:

该示例工作正常,但精度方法是静态的,我没有意识到如何动态设置该值。我想为每次使用指定精度,在执行时更改它。我不介意在开始时创建所有生成器,因为我想要定义数量的精度。

问题是当它们之间的唯一区别是返回数字时,我不相信我必须为每个精度数字创建一个类。我试图用一个成员方法编译这个类(如果这对我来说是一个足够的成员精度方法),我想我被困在这个类方法问题上。

如何创建具有不同精度的生成器对象并且只使用它们而不创建一个以上的类?如果我只能使用一个生成器,只需更改一个属性会更好。

如果有人遇到同样的问题并且可以分享解决方案将非常有帮助。

谢谢,

0 投票
1 回答
403 浏览

c++ - 如何从 boost karma 生成 C++ 数组?

我看到如何使用 karma 生成管理内存的容器,例如std::string。但是如果缓冲区(char[N])已经被预分配呢?

我想找到一种方法将双精度解析为现有缓冲区的地址。可以假设缓冲区对于这种情况足够大。也许根本的问题是真的 - 是否已经有一个输出迭代器适配器或业力中可以使用的本机数组的东西?

0 投票
1 回答
115 浏览

boost - 提升业力语义动作调用图

我需要将值映射到 std::string (使用以下映射和 BOOST_FUSION_ADAPT_STRUCT )

使用以下代码,我想生成我的输出:

但它不编译。

有没有办法我可以写这样的标题:

0 投票
1 回答
116 浏览

c++ - Boost Karma 对象方法调用

作为我的问题和sehe答案的扩展,我想在生成输出时调用一个函数。

我添加了方法bool isRoby()并修改了emp规则。

我刚找到Phoenix Lazy,但似乎不匹配。

0 投票
1 回答
246 浏览

c++ - 提升精神业力真实发电机性能

当我对使用实数策略时性能下降感到有些惊讶时,我正在检查提升精神业力生成器的性能。Live on Coliru
代码取自boost Spirit,并添加了几个测试功能。Coliru 示例替换了使用的计时器。请注意,Coliru 会中止长时间运行的程序,因此它可能不会结束所有测试。
正如人们所看到的,策略使用会降低性能 2-3(coliru 上的 x10)倍。这是预期的行为吗?

我的数字:

sprintf:0.367
iostreams:0.818
格式:1.036
业力:0.087
(字符串):0.152
业力(字符串)与策略:0.396
业力(规则):0.12
业力(直接):0.083
业力(直接)字符串:0.089
业力(直接)字符串与政策:0.278


使用 x64 VC14 构建

0 投票
1 回答
177 浏览

c++ - 我可以使用 Boost.Spirit 进行通用数学 (AST) 模式匹配和操作吗?

我正在研究 C++ 中的模式匹配,以及诸如Mach7之类的东西,这似乎是解决问题的一种功能性方法,以及更通用的Visitor Pattern,这似乎是最小的公分母:它可以做任何事情,但只擅长具体案例。

我想操作数学表达式(简化,评估,并执行计算,如微分方程求解和积分,象征性地)。是的,我希望最终得到一个计算机代数系统。对于输入,我正在考虑使用 Boost.Spirit (X3) 来解析某种形式的输入(目前正在那里获得基本的 LaTeX 支持,尽管索引与子/上标是一个问题......)。

然后我想到了使用Boost.Spirit不仅解析输入的“文本”,还使用库的非解析器组件对生成的 AST 实际执行数学操作的疯狂想法。 这是否足以满足我的目标所需的模式,还是我应该看看其他解决方案?我试图找到关于其他 CAS 如何在内部工作的文档,但是没有通过像Maxima这样的毫无疑问的出色代码,除了非常简单的数学 AST 实现之外,我似乎找不到任何信息。所以我几乎没有输入信息来确定 Boost.Spirit 是否可以做我最终需要做的事情。

0 投票
0 回答
174 浏览

c++ - Boost Spirit Karma 为向量中的每个条目重复相同的输出

从一个微不足道的问题开始,我选择用boost::spirit::karma它来把它变成一些更棘手的东西。我们有一个映射enum classvectors 的条目的映射int,我想生成表单的输出

Foo 有 3 个条目:

富有 1

富有 5

富有 7

...

如果数据中有条目{Foo, {1, 5, 7}}

数据格式其实并没有那么重要,但是如果map的key是strings或者ints,就可以karma::lit再次输出保存的属性。但是,这是不可能的,并且该规则会消耗一个属性,因此无法再次使用它。

我设法用相当的技巧提取了向量的大小,但我无法Foo重复这个名字。

0 投票
1 回答
301 浏览

c++ - 提升业力:这个对 transform_attribute 的隐式调用是如何工作的?(或者没有?)

我有以下似乎工作正常的代码(我基于重用解析变量的语义操作 boost karma)。

我想了解几件事:

  1. 为什么我不需要在karma::attr_cast任何地方使用?我的start规则是一个向量,std::shared_ptr而该elt规则适用于实际的对象 const 引用。我最初尝试过attr_cast但一无所获,只是半心半意地尝试了这个版本,以防万一它奏效了,而且它奏效了……
  2. 如果我完全注释掉我的自定义,为什么它仍然可以编译transform_attribute?是否提供了一些默认值std::shared_ptr<T>-> T&transform_attribute?我找不到太多,但也许我没有找对地方?
  3. 如果我注释掉我的 custom transform_attribute,如上所述,代码仍然编译,但运行时显然存在一些内存损坏。karma::string生成垃圾。在某种程度上,我可以理解一定发生了一些有趣的事情,因为我什至没有告诉 karma 如何从我shared_ptr的对象到达对象。它是编译实际错误/错误的事实吗?

非常感谢您的时间和帮助!