问题标签 [boost-spirit]
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++ - 如何使用 Boost Spirit 从 std::string 中提取双对?
我想用 Boost Spirit 将带有双对序列的字符串解析为 std::map 。
我改编了来自 http://svn.boost.org/svn/boost/trunk/libs/spirit/example/qi/key_value_sequence.cpp的示例, 但我在为键和值定义正确的 qi::rule 时遇到问题:
我不能将 double() 用于键和值规则,并且不能从 double 构造 std::string。
c++ - boost.spirit 中的编码
如何为 assign_a 中的值设置编码?我需要设置西里尔语,但我不知道该怎么做
c++ - 如何使用 Boost.Spirit.Qi 解析不同的结构?
在此示例中,员工结构以“employee{int, string, string, double}”的形式解析。
我想知道是否可以修改此示例以解析不同类型的结构,例如“intern{int, string, string}”。
具体来说,我想将结构传递给在结构类型上重载的函数。如果我可以避免为此使用多态双重分派,而是保留被解析的具体类型以静态匹配正确的重载函数,那就太好了。
c++ - 改进替代解析器的使用
我从精神手册中扩展了 Mini XML 示例。
该语法描述了一个 xml 标记,它可以用 '/>' 关闭并且没有子节点,或者像示例中那样用关闭标记 '' 关闭并且可以选择有子节点。
是否可以在没有 attr(Children()) 标记的情况下编写此规则?我认为这或多或少是性能滞后。我需要它来避免替代解析器的可选属性。如果没有子标签,则属性应该只是一个空向量。
c++ - 理解和使用 Boost Phoenix 库,重点是惰性求值
我刚刚发现了 Boost Phoenix 库(隐藏在 Spirit 项目中),作为函数式编程风格的粉丝(但仍然是业余爱好者;对 haskell 和 scheme 有一些小经验),我想玩弄这个库来学习关于这个库的合理应用。
除了使用 fp 样式增加代码的表达性和清晰度之外,我对以低成本加速计算的惰性求值特别感兴趣。
一个小而简单的例子如下:存在某种路由问题(如 tsp),它使用欧几里德距离矩阵。我们假设,距离矩阵的某些值从未使用过,而有些则经常使用(因此每次调用都动态计算它们不是一个好主意)。现在似乎有一个惰性数据结构来保存距离值是合理的。凤凰怎么可能?(忽略我完全不用 fp-style-programming 就可以轻松完成的事实)阅读 phoenix 的官方文档并没有让我理解到足以回答这个问题。
有可能吗?(例如,在 Haskell 中,创建 thunk 的能力可以保证以后可以计算该值是语言的核心)。
使用带有 phoenix 中定义的所有惰性函数的向量是什么意思?像我一样天真,我试图用随机值填充两个矩阵(向量>),一个用普通的 push_back,另一个用 boost::phoenix::push_back 并试图从这些矩阵中读出少量的值并将它们存储在容器中以供打印。懒惰的总是空的。我是否以错误的方式使用凤凰/应该有可能?还是我误解了phoenix中容器/算法的功能。后者的一个小线索是 FP++ 库中存在一个特殊的列表数据结构,它影响了 phoenix。
此外:
- 你用凤凰干什么?
- 你知道一些关于凤凰的好资源吗?(教程,博客条目...)
感谢您的输入!
stl - 使用 Boost::Spirit (V2.4) 解析到容器中
我刚刚开始深入研究 Boost::Spirit,目前的最新版本——V2.4。我的问题的本质如下:
我想解析像“1a2”或“3b4”这样的字符串。所以我使用的规则是:
规则的属性必须是“vector <double>”。我正在将它读入容器中。
完整代码:
我正在用 g++ 4.4.3 编译它。它返回“1 1 2”。虽然我期待“1 2”。
据我了解,这是因为解析器:
- 去第一个选择
- 读取一个 double_ 并将其存储在容器中
- 然后停在 "a",同时期待 lit("b")
- 转到第二种选择
- 再读两个双打
我的问题是——这是一个正确的行为吗?如果是——为什么?
c++ - 使用增强精神将字符串转换为 int
我听说精神在将字符串转换为 int 方面非常快。
但是,我无法创建一个可以这样做的简单函数。就像是
int string_to_int(string& s) { /*?????*/ }
任何人都可以使用升压精神来填补这个功能。
顺便说一句,我正在开发 boost 1.34 而不是最新版本。
c++ - 如何使用 boost.spirit 提取 std::string?
使用 boost.spirit 我尝试解析表单的简单命令行command:param1 param2...
为此,我创建了这个解析器:
这两个复合解析器的属性类型是向量,所以如果 cmd 和 params 是向量类型,那么这个工作。但是,如果它们是 std::string 类型,则不是。在网上搜索此解决方案时,我发现它也应与字符串一起使用。无论如何我可以用字符串来完成这项工作吗?
c++ - 将“替代”与“可选”混合时出现 Boost.Spirit 错误?
我只使用了 Boost.Spirit(来自 Boost 1.44)三天,试图通过 RFC2822 中的确切语法来解析原始电子邮件消息。我以为我开始理解它并到达某个地方,但后来我遇到了一个问题:
如果测试#3 有效,那么为什么测试#5——与两个替代方案完全相同的测试——会失败?
出于同样的原因,如果你会原谅这个表达式:如果测试#4有效,并且开头的空格被标记为可选,那么为什么测试#5(完全相同的测试具有完全相同的输入,除了有输入中没有前导空格)失败?
最后,如果这是 Boost.Spirit 中的一个错误(我怀疑它一定是),我该如何解决它?
c++ - 用增强精神解析转义的字符串
我正在使用 Spirit 2.4,我想解析这样的结构:
文本{text_field};
关键是在 text_field 中是一个带有符号“{”、“}”和“\”的转义字符串。我想为此使用 qi 创建一个解析器。我一直在尝试这个:
但甚至不编译。任何的想法?