问题标签 [qi]
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:慢解析优化
我是 Spirit 和 Boost 的新手。我正在尝试解析 VRML 文件的一部分,如下所示:
以#开头的注释是可选的。
我写了一个语法,效果很好,但是解析过程需要很长时间。我想优化它以运行得更快。我的代码如下所示:
我打算解析的部分位于输入文本的中间,因此我需要跳过文本部分才能找到它。我使用repo::seek实现了它。这是最好的方法吗?
我按以下方式运行解析器:
解析输入文本中的大约 80k 条目大约需要 2.5 秒,这对于我的需要来说相当慢。我的问题是有没有办法以更优化的方式编写解析规则以使其(更快)更快?我一般如何改进这个实现?
我是Spirit的新手,所以非常感谢一些解释。
c++ - Boost Spirit Qi,我有一个解析器,我想“动态”映射到一个结构(意味着参数的顺序不固定)
所以我努力让 boost::spirit::qi 在我的皮肤下。到目前为止,我的玩具示例是一个解析器,它解析具有以下格式的 Wavefront OBJ 材质库:
但是,材质 ShortBox 的参数顺序可能会有所不同。我创建了以下成功解析它的语法:
现在我想建立一个std::map<std::string,Material>
定义Material
为:
具有以下融合适应:
所以我目前的想法是改变规则mtl_details
,使其返回一个完整的Material
规则mtl
,返回一个所述 Material 的映射,其中 key 是 after 的字符串newmtl
。但是,我不知道如何使用属性从解析树构建 Material 对象,映射Ka, Kd, Ks
ect 的所有命中。到同一个结构上。阅读示例,它们似乎都隐式映射到与其关联的任何变量,或者它们仅映射到简单值,而不是对象。
c++ - 用于解析结构化文本文件的 boost::spirit::qi 语法
a) 到目前为止,这是我修改后的完整代码。它没有完全运行,因为我遇到错误,例如
“错误:'struct boost::spirit::traits::container_value 中没有名为 'type' 的类型”
请在上面找到我的完整代码,也许这可以使我的问题更清楚。我的代码仍然没有运行。我必须传递的数据示例如下所示:
c++ - 如何编写一个 boost::spirit::qi 解析器来做什么?在正则表达式中吗?
假设我们有一个正则表达式“start:(?: ([0-9]{1,2}))? ([0-9].*)”。
它会匹配
和
我们也可以分别得到2个匹配的字符串。
我尝试使用 boost::spirit::qi 解析器来解析 string2 但它无法匹配。
我们当然可以使用前瞻运算符来检查规则 1 后面的内容,但是是否有更通用的方法来实现正则表达式运算符'?? 谢谢!
integration - rpm -qi 不显示已安装的内核版本
我的 OL 6.5 服务器在“rpm -qi”中显示如下:
版本:2.6.32
发布:431.el6
源 RPM:kernel-2.6.32-431.el6.src.rpm
但“uname -a”显示低于内核版本:
Linux dmdroemoc01 3.8.13-16.2.1.el6uek.x86_64 #1 SMP Thu Nov 7 17:01:44 PST 2013 x86_64 x86_64 x86_64 GNU/Linux
“rpm -q kernel”显示如下:
kernel-2.6.32-431.el6.x86_64
我需要使“uname -a”输出和“rpm -q kernel”输出相同来安装微软集成服务。请问有什么帮助吗?
parsing - 灵气如何解析时长
我想解析像“1m2s3ms”这样的东西,其中每个部分都是可选的,例如“1m3ms”
问题是,mRule和msRule非常相似,并且mRule在解析上面的示例时获胜。我可以使用任何指令吗?
c++ - Boost::Spirit 解析字符串的斗争
我正在尝试使用 Boost::Spirit 解析字符串,但我无法让它工作。从今天开始,我就没有使用 Boost::Spirit 的经验。
该字符串由以“;”分隔的命令组成。命令是
“INC someInteger”
“炸弹第一个整数第二个整数”
“移动第一个整数第二个整数第三个整数”
“味精一些字符串”
“等待”
我设法做到了这一点:
我现在遇到的问题:
我不知道如何提取超过 1 个整数
我不知道如何将所有内容合并为正确的语法,以便将所有内容解析为多个向量。
我还没有考虑味精和等待。
c++ - 找到一些单词后如何解析数字
我想解析下面提到的 JSON 并从中提取 productionYear 值
我有以下规则:
解析器失败,最后一个迭代器位置:0
谁能告诉我我做错了什么?
c++ - 提升凤凰不参考上一场比赛
我正在尝试解析字符流并查找解析的第二个字符以获得第三个字符所需的重复次数。然而,变量 objSize 在重复中没有被正确引用,并且完整解析失败。如果我分配 objSize = 3 我得到完整的解析通行证。这是我正在使用的代码。非常感谢任何帮助。
boost - 与当地人一起提升精神调试规则
当 my_rule 有一些自定义类型的局部变量时,我无法在调试模式下编译代码(使用 BOOST_SPIRIT_DEBUG_NODE(my_rule) 的代码)。
- 有规则的第一个版本
qi::locals<std::string>
是可以的 - 有规则的第二个版本
qi::locals<std::string,int>
还是可以的 - 带有规则的当前版本
qi::locals<std::string,std::vector<int> >
无法编译。
错误:不匹配operator<<
(操作数类型为std::basic_ostream<char>
and const std::vector<int>
)
我声明流式传输 operator<<
:
但它仍然无法编译。
我使用升压 1_64_0。这是最小的完整代码:
我认为在运营商声明中遗漏了什么?
谢谢你的帮助..