问题标签 [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 AST
作为大学研究工作的一部分,我正在编写一个小工具来分析简单的 B 机器替换。该代码成功解析了 mySubst := var1 + var2 形式的测试输入。但是,我收到一条弹出错误消息,说“此应用程序已请求运行时以不寻常的方式终止它。”在命令提示符窗口中,我收到一条“断言失败消息”。主程序如下:
BMachineTreeGrammar.hpp 文件中定义的语法如下:
我在运行程序时得到的输出是:
我将不胜感激解决此问题的任何帮助。
c++ - 凤凰城中的 C++ boost::lambda::ret 等价物
Boost lambda 允许使用ret<T>
模板覆盖推导的返回类型。我曾尝试在 phoenix 中搜索等价物,但找不到。
凤凰有等价物吗?我知道如何制作自己的替代品,但我宁愿不这样做。谢谢你
c++ - Boost.Spirit.Lex 中的 Phoenix 占位符 _val 出错 :(
我是 Boost.Spirit.Lex 的新手。每次我尝试在我的简单词法分析器中的语义操作中使用 lex::_val 时都会出现一些奇怪的错误:
和
此代码在编译时导致第 167 行的 Boost 标头 'boost/spirit/home/lex/argument.hpp' 出现错误:
返回:无法将 'const boost::variant' 转换为 'boost::variant &'
当我不使用 lex::_val 程序编译时没有错误。
显然,我以错误的方式使用 _val,但我不知道如何正确执行此操作。请帮忙!:)
PS 对不起我糟糕的英语……</p>
c++ - 使用 boost Spirit 语法构建错误(boost 1.43 和 g++ 4.4.1)
我在编译一个小的精神/气语法时遇到问题。构建堆栈跟踪对我来说没有任何意义(尽管我可以注意到一些 assertion_failed ,但这并没有带来太多信息)
输入语法头:
输入语法.h
测试构建程序:我似乎在 qi::phrase_parse 处构建失败,我使用的是 boost 1.43 和 g++ 4.4.1
最后,构建错误如下:
c++ - 使用 boost Spirit 语法构建错误(boost 1.43 和 g++ 4.4.1)第二部分
我在编译一个小的精神/气语法时遇到问题。我正在使用 boost 1.43 和 g++ 4.4.1。
输入语法标题:构建错误似乎指向“指令”规则的定义,也许是“[sp::_val = sp::_1]”以某种方式破坏了它,但这或多或少是基于关于精神文档教程使用 xml 节点解析器所做的事情
输入语法.h
测试构建程序:
最后,构建错误如下:
(完整的错误跟踪比 stackoverflow 问题的允许大小大 20 倍,所以我在http://codepad.org/Q74IVCUc发布了它的完整版本)
...更多错误,但我不得不截断以适应 30k 限制
c++ - boost spirit semantic action parameters
in this article about boost spirit semantic actions it is mentioned that
There are actually 2 more arguments being passed: the parser context and a reference to a boolean ‘hit’ parameter. The parser context is meaningful only if the semantic action is attached somewhere to the right hand side of a rule. We will see more information about this shortly. The boolean value can be set to false inside the semantic action invalidates the match in retrospective, making the parser fail.
All fine, but i've been trying to find an example passing a function object as semantic action that uses the other parameters (parser context and hit boolean) but i haven't found any. I would love to see an example using regular functions or function objects, as i barely can grok the phoenix voodoo
c++ - 使用 Boost Spirit 解析语法
我正在尝试解析如下的树表达式之类的 C 函数(使用Spirit Parser Framework):
为此,我尝试在以下语法上使用三个规则:
请注意,我的标记规则只是试图捕获表达式中使用的标识符(“函数”名称)。另请注意,标记规则的签名返回 aExpressionAST
而不是 a std::string
,就像在大多数示例中一样。我想这样做的原因实际上很简单:我讨厌使用变体,如果可能的话我会避免它们。我想保留蛋糕并吃掉它会很棒。
命令应该以标签(当前节点的名称,AST 节点的第一个字符串字段)和括号括起来的可变数量的参数开头,每个参数可以是标签本身或另一个命令。
但是,这个例子根本不起作用。它编译和一切,但在运行时它无法解析我所有的测试字符串。真正让我烦恼的是我不知道如何修复它,因为我无法真正调试上面的代码,至少在这个词的传统含义上是这样。基本上我看到我可以修复上述代码的唯一方法是知道我做错了什么。
所以,问题是我不知道上面的代码有什么问题。您如何定义上述语法?
ExpressionAST
我使用的类型是:
c++ - 使用 boost Spirit 语法构建错误(boost 1.43 和 g++ 4.4.1)第三部分
好的
我正在尝试构建语法,目前它看起来像这样:
构建错误的片段如下,基本上它说正在尝试使用 std::vector< MockExpressionNode > 初始化 MockExpressionNode& (可能是 push_back 参数),就像某种方式 phoenix::bind 切换对象的顺序和参数参数。
仅在尝试了以下原始形式后,我才尝试将 phoenix::bind 绑定到 std::vector::push_back :
我得到了这个错误(只有最后一部分)关于 std::vector::push_back 没有匹配函数:
boost - 使用自定义属性解析提升 Spirit 规则
我正在编写一个 Boost Spirit 语法来将文本解析为这些结构的向量:
这个语法有这样的规则:
然而,实际的语法pairSequence
是这样的:
我希望这个语法产生一个等于双精度并Pair
等于某个常数的值。我想做这样的事情:a
b
当然,上面没有编译。我尝试向 中添加构造函数Pair
,但仍然出现编译错误(没有匹配函数调用 'Pair::Pair(const boost::phoenix::actor >&, double)')。