问题标签 [boost-spirit-x3]

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.

0 投票
1 回答
477 浏览

c++ - 用 boost 精神 x3 将数字解析为字符串

我想用精神 x3 将各种数字解析成一个字符串。我试图这样做,但它不起作用。

如何使用 x3::int32 解析器将 Int 解析为字符串?

0 投票
2 回答
143 浏览

c++ - 如何绕过贪婪的rd?

我想解析一个可以包含“-”的字符串,但不能以它开头或结尾。

我希望这个解析器能够工作:

但是在我的测试输入“某事”中,它只解析“所以”而不吃剩下的。

麻烦的是中间位*(alnum | char_('-'))一直吃到最后(包括最后一个字符,所以整个可选括号都失败了)。

如何和为什么在这里这里解释

我想知道的是,我怎样才能绕过它并制作这个解析器?

现场观看:http ://coliru.stacked-crooked.com/a/833cc2aac7ba5e27

0 投票
1 回答
228 浏览

c++ - 从 Spirit X3 开始

我刚开始使用 Spirit X3,我有一个与我的第一次测试有关的小问题。你知道为什么这个函数返回“false”吗?

我已经看到问题与我编写语法的方式有关。如果我用这个替换它,它会返回“true”

我正在使用 Boost 1.61.0 中包含的 Spirit 版本。

提前致谢,

0 投票
0 回答
168 浏览

c++ - 编译器差异:扩展 x3::variant 需要定义复制构造函数、复制赋值操作符和使用 gcc 但不是 clang 的默认构造函数

我改编了 x3 文档(http://ciere.com/cppnow15/x3_docs/spirit/tutorials/reexpr.html)中的一个示例来解析一个简单的二进制前缀表示法语法,我发现我需要定义复制 con,复制 assign op 和使用 g++ 6.1.1 编译时的默认构造函数,尽管该示例声称您只需要base_type使用using. 然后我发现它可以使用 clang 3.8.1 按预期编译。我将发布代码的重要部分,这里是一个完整的 g++ 示例,带有显示错误的 AST 打印机。

我看到g ++似乎认为复制con被删除了,因为已经定义了移动构造函数或移动赋值运算符,但是为什么它用clang编译呢?哪个编译器是正确的?

0 投票
1 回答
159 浏览

c++ - 将两个整数的序列匹配为一个`std::pair`

我正在尝试使用Boost.Sprit x3将两个整数的序列匹配到std::pair<int, int>. 从文档来看,以下代码应该可以编译:


melpon.org 链接


但是,它只匹配第一个整数。如果我更改std::pair<int, int> result;int result;然后 print result,我会得到1我的输出。

为什么会这样?int_ >> int_定义匹配(并设置为属性)两个整数的解析器的正确方法不是吗?

0 投票
1 回答
171 浏览

c++ - 提升 Spirit X3 和 std::unordered_map

我想解析成一个std::unordered_map.

示例代码:

有以下主要内容:

和一个示例文件:

编译器错误信息是:

接下来怎么办,有办法适应std::unordered_map吗?

0 投票
1 回答
132 浏览

c++ - 使用增强精神 x3 进行语义检查

我目前正在尝试使用 boost spirit x3 编写编译器。我完成了解析器(现在没有语义操作和错误处理,只是解析成 ast)。既然我想实现语言来支持作用域和函数调用,我问自己什么时候检查被调用的函数是否存在?我应该在构建 ast 时检查当前范围内是否存在函数(在使用语义操作进行解析时),还是应该在编译 ast 时检查这一点?范围堆栈也是如此。我应该在解析、使用语义操作还是编译 ast 时建立范围堆栈?

0 投票
1 回答
94 浏览

c++ - 当我使用 expect 运算符时,我会使用 Spirit X3 获得更快的解析器吗

在精神 X3 中,我可以构建一个这样的解析器:

如果我知道字符串之后Number是一个 int 并且String一直在一个字符串之后,我可以使用>说 after Numberonly 是一个数字,依此类推。

对我来说,区别在于如果解析器无法解析输入,则会抛出异常。

现在我的问题是,我应该尽可能使用>操作符而不是>>操作符吗?生成的解析器是否>比仅使用>>运算符的解析器更快?

0 投票
1 回答
72 浏览

boost-spirit-x3 - 解析器不会失败,船长不会跳过

我的语法有问题。我不确定为什么要解析日期以及为什么我不需要词位解析器。

完整示例

Live On Coliru

输出:

没有词位解析器:

将规则 term_ 更改为:

我以为船长会在 lit() 之后尝试跳过?

0 投票
1 回答
165 浏览

c++ - 我什么时候可以使用期望运算符?

我正在开发一个带有 boost spirit x3 的解析器。我完成了语法,解析器按预期解析。现在我想添加错误处理,所以我必须在我的语法中添加期望点。我的问题是我什么时候可以使用期望运算符>而不是“跟随”运算符>>?我只能像在语法的另一部分从未发生过一样使用它a > ba >> b