问题标签 [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.
c++ - 精神业力:访问不可复制的指针
我试图在我的业力语法中访问一个指针向量,但收效甚微。指针类型是不可复制的,因此使用它的规则必须引用:
这编译但返回:测试 2 规则:1,测试 1 规则:25104656,测试 1 规则:25104720等等。我知道在这种简单的情况下我可以做到
来解决它,但实际上value是另一种不可复制的类型,它应该被传递给语法,因此我需要使用示例中所做的结构调整。
我也知道这里提到的自定义点 deref_iterator ,但是,我在模板库上工作,并且认为不可能将 deref_iterator 专门化为依赖于模板的类型。
关于如何使示例工作的任何想法?
c++ - Boost::spirit::karma: duplicate 在 repeat 或 kleene star 中不起作用?
这是一段非常简单的代码,用于boost::spirit::karma
在 graphviz dot 语言中生成格式化输出:
我希望这会产生:
相反,它产生了:
这意味着该duplicate[]
指令在 kleene star 中根本无效。我也尝试过该repeat[]
指令,但这也不起作用。
我究竟做错了什么?我正在使用提升版本 1.53.0。我用g++
4.7 和clang++
3.2 编译了代码,都产生了相同的结果。
c++ - 如何访问 boost::spirit::karma 中嵌套对象的数据?
在ItemList
包含对象的列表中Item
,如何访问Item
生成器中的对象?
以下示例代码在 VC9 上编译(适当设置了 boost 包含和链接目录)。我不知道如何设置list_generator::item
。
输出是:
c++ - Boost:Spirit:Karma:如何获得当前的输出位置?
我想生成一些格式化的输出。为此,需要一些缩进。因此,在生成过程中的某个时刻,我想获得当前位置,以使以下行缩进该数量。
这是一个最小的例子。请假设,我们不知道karma::lit("Some text: ")
编译期间的输出有多长时间。事实上,这个引导文本可能是由几个规则生成的。
这产生
我想要结果:
为了实现这一点,需要在生成向量之前知道当前位置。那么,类似于qi::raw[]
?
更新:指向到目前为止生成的输出的指针也可以。
boost - 使用 boost::spirit::karma 的 boost::variant 类型的输出
我正在尝试输出参数,它们可以是单个参数或参数向量。以下代码不是我想要的:
(真正的代码有其他类型的参数,不只是 int,我不能把所有的东西都变成 ParameterList。)
我不太明白如何进行这项工作,特别是因为使用 boost::spirit::qi 的类似解析结构对我来说很好。
boost - boost::spirit::karma 输出引号中的字符串
我正在尝试使用 boost::spirit::karma 转义引号中的字符串。如果它只是一个字符串,这很好。但是,对于 std::vector 中的 boost::variant 中的字符串,它不会。只是打印字符串确实有效,但我不太明白为什么。
第 (1) 行工作正常,但没有做我想要的。第 (2) 行应该这样做,但没有。
boost - boost::spirit::karma Generator 规则中的语义动作
这一直困扰着我几个小时,我不明白如何使它工作。我只是想在每次使用规则时做一些事情,在这个例子中增加一个计数器。如果我没有明确指定规则,而是在调用 boost::spirit::karma::generate 时使用它,它就可以工作。但是当我尝试将所有内容都放入规则中时,它不会编译,并且我没有从冗长的错误消息中获得任何见解。
(上面你可以看到最优雅的 boost::spirit 版本,但是使用 lambda 函数或成员函数都会产生相同的结果,“直接方法”有效,“规则方法”无效。)
不幸的是,我也找不到任何涵盖此内容的文档或示例或其他资源,我也非常感谢您提供参考。
c++ - 为什么常量字符串在用于输入变量时会变成布尔值?
我已将我的问题浓缩为下面的(也许不是最小的)示例应用程序。该示例是一个通用 JSON 解析器。但是,它表现出两个问题。1. 当其他选项都没有通过时,当 bool_ 是变体列表中的输出器时,它总是输出 true 或 false。如果它不是最后一个,那么它之后的任何内容都将被有效地使用。我不知道为什么。2. 当输入是字符串时,字符串处理程序永远不会从变体中触发。在变体之外使用时,它会触发。
示例代码将字符串输出简化为 karma::string 并且仍然显示错误。当我把这里学到的东西返回到真正的应用程序时,字符串输出将是一个 C 风格的转义字符串,所以只适用于 karma::string 的东西将无济于事。
我已经阅读(并重新阅读)使用 boost::spirit::karma和boost::spirit::karma 字符串输出的 boost::variant 类型的输出,并且不能将其正确应用于我的案例(即我毕竟不明白答案),否则它在更复杂的示例中不起作用。而且我也熟悉 mini_xml 示例代码。
关于我做错了什么有什么建议吗?为什么我做的是错的,而修复是对的?
非常感谢所有帮助。
编辑以更改标题以涵盖显示的实际问题。编辑以修复代码示例上的上传缺失。
c++ - Generating default value when none is found
I have an input vector that can have any size between empty and 3 elements. I want the generated string to always be 3 floats separated by spaces, where a default value is used if there aren't enough elements in the vector. So far I've managed to output only the contents of the vector:
I've tried modifying the float rule to something like this: floatRule = double_ | lit(0.0f)
, but that only gave me compilation errors. The same for a lot of other similar stuff I tried.
I really have no idea how to get this working. Some help would be great :)
EDIT: Just to make it clear. If I have a vector containing 2 elements: 1.0 and 2.0, I want to generate a string that looks like this: "1.0 2.0 0.0"
(the last value should be the default value).
c++ - Boost Spirit Karma - 带有约束和传播失败的字符串的输出向量?
我想使用 Boost Spirit Karma 输出一个字符串向量。如果任何字符串不满足约束,则输出生成应该失败。我尝试了以下方法:
如果任何子规则不成功,有没有办法使规则失败?