问题标签 [boost-spirit-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语法的字符串拆分
我正在使用 Boost 1.44,Spirit 解析器非常适合数字解析,但对于字符串解析确实很棘手。我正在尝试使用多个分隔符解析要拆分的字符串:',',';' 或者 ' '。当我这样做时它适用于数字(其中 vect = vector < double >):
矢量,空间);
但是,当我使用 vect = vector< string > 修改字符串的语法时,
我收到以下错误:
我将错误缩小为语法语法中的第一个 +char_ ,它被视为一系列字符而不是字符串。有没有办法解决这个问题?
谢谢
c++ - Spirit 无法将属性分配给单元素结构(或融合序列)
我的目标是让我qi::grammar
返回一个属性。我在这样做时遇到了很大的困难spirit::lexer
。
我希望使用下面给定的语法,如果我用 调用它spirit::qi::parse(begin, end, grammar, output);
,struct ident output
它将具有已解析词素的内容。
错误似乎主要来自这一行:start %= lexer.identifier;
系统说明
- 提升 1.47.0
- Mac OS X 10.7.2
- clang++ 或 g++(下面显示的错误来自 clang++)
编译命令
源代码
报告 2 个错误
boost-spirit - 如何在带有 Boost Spirit 的 AST 中使用只有一个属性的类?
我想使用 Boost Spirit 将文件解析为 AST。
我的 AST 的根是一个只有一个属性的类:
如果我使用单个规则解析:
它不会编译,但如果我向 Program 添加一个字符串名称,它会运行良好。我可以使用向量作为根,但我想使用类,因为我想向 Program 类添加一些方法。
编辑 :
如果我用大括号包围我的程序,它会很好地工作:
编译和工作正常,但是:
不编译...
Boost Spirit 中有什么东西可以阻止使用这种简单的规则吗?
c++ - Boost Spirit 语法匹配嘈杂的输入
我正在尝试解析嘈杂的输入,理想情况下,我将能够查看一个节是否符合规则,以及它是否确实获得了我需要的数据并丢弃其余部分。
我想要的数据如下。
我想确保 Event if 类型为新状态。
我需要通道状态。其余的我不关心(只是还)所以我想忽略它,我希望它灵活并接受重要内容之间的任何旧废话,真的我不想说忽略这条线,而是忽略事件和我捕获值的通道状态结束之间的任何内容。
到目前为止,我得到了:
但这由于某种原因不起作用,当我这样做时,我总是会得到错误的回复:
编辑:Boost 版本 1.42 编译器 g++ 4.4 Spirit 0x2020
c++ - Boost Spirit:“语义行为是邪恶的”?
阅读并观看此演示文稿:
http
://boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/
我发现了这个声明——基本上我们建议不要使用语义动作。
我必须承认,我已经感受到了类似的感觉:带有语义动作的语法实际上看起来有点难看。而且,当我需要扩展/更改它们时,需要大量的“微观管理”来精确地使用语义操作。演示文稿中演示的属性语法方法似乎更加优雅和有前途。
所以我想问:这是“官方”观点吗?我应该学习如何使用属性语法并更详细地避免语义动作吗?如果是这样——我想要求一些基本的(甚至可能是微不足道的)示例,展示这种方法——LISP 解释器太复杂了,我无法咀嚼......
c++ - 从 boost::spirit 解析器中检索 AST
在我阅读了有关boost::spirit的教程后,我非常喜欢它,因为解析器组合器语法。制作解析器非常简单。
不幸的是,这些教程在从解析器中获取复杂数据结构的问题上并不准确。我正在尝试使用Kaleidoscope AST。
无论如何,这是我的 AST 代码:
我省略了这些BOOST_FUSION_ADAPT_STRUCT
部分,但它们在那里。
这是我的表达式解析器:
我遇到的问题是,结果似乎有问题ast::expression
。编译后抛出 200 多行复杂的模板错误。我怀疑这与我试图从binop
规则中获取信息的方式有关,但我不确定。
任何人都可以帮忙吗?
c++ - Using Boost.Spirit to extract certain tags/attributes from HTML
So I've been learning a bit about Boost.Spirit to replace the use of regular expressions in a lot of my code. The main reason is pure speed. I've found Boost.Spirit to be up to 50 times faster than PCRE for some relatively simple tasks.
One thing that is a big bottleneck in one of my apps is taking some HTML, finding all "img" tags, and extracting the "src" attribute.
This is my current regex:
I've been playing around with it trying to get something to work in Spirit, but so far I've come up empty. Any tips on how to create a set of Spirit rules that will accomplish the same thing as this regex would be awesome.
c++ - 如果函数调用返回 true,则跳过 boost::spirit::qi 中的部分输入
我最近一直在玩 boost::spirit::qi 并且一直在尝试编写我自己的(非常非常简单的)脚本语言来解析它。当我处理脚本中的 if 语句时,我遇到了麻烦。如果函数调用返回真,我需要解析器跳过部分输入。
例如,我将标记定义为接受变量名 (a-zA-Z_),并将比较设置为接受“>”或“<”。代码示例如下。
如果函数 compare 返回 true,我将如何跳过下一部分?
c++ - boost::spirit 中的类 v/s 结构
在 boost::spirit 文档中,语法是使用 struct 定义的。例如,
我想知道我是否可以使用类来编写它(如果不能,那为什么?)。我正在这样做。
在头文件中
并在源文件中
名称空间已使用 typedef 缩短。我正在使用上述方法编写,编译器给了我太多难以理解的错误。基本上没问题还是我在做一些奇怪的事情?
你能指出一些有人使用类而不是结构来编写语法的代码吗?
更新 :
我现在无法链接。它说undefined reference to
dimacs_grammar<__gnu_cxx::__normal_iterator, std::allocator >> >::my_grammar()` 。问题是在使用结构时,我在写
我不确定如何为此编写等效的类声明和定义?
c++ - 如何在语法中添加 qi::symbols?
我正在尝试使用 Boost.Spirit (V. 2.5) 库来创建一个迷你计算器。我要实现的功能: - 基本微积分(+、-、/、*),有效 - 一些函数(如 min、max),也有效 - 声明/分配双变量,问题出在......我添加“[vars.add]”我得到编译错误(模板参数不明确)。我试过“add(char_(_1)”,“add(_1)”,......但似乎没有任何效果。我显然错过了一些东西(实际上不理解一些东西)。如果有人可以帮助我,我会我非常感激!
这是来源:
我想做一些事情,例如: