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

标签 c++ parsing c++14 boost-spirit boost-spirit-x3

本着 X3 的精神,我可以像这样构建一个解析器:

const auto p = ("Number:" >> x3::_int)
             | ("String:" >> +x3::alpha);

如果我知道在字符串 Number 之后是一个 int,而在 String 之后一直是一个字符串,我可以使用 > 表示之后Number 只出现一个数字等等。

const auto p = ("Number:" > x3::_int)
             | ("String:" > +x3::alpha);

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

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

最佳答案

您应该始终只分析事物。

无论:

Will I get a faster parser using spirit X3 when I use the expect operator

仅在防止回溯备选方案的范围内,但如果您需要它,它不会做同样的事情。

关于c++ - 当我使用 expect 运算符时,我会使用 spirit X3 获得更快的解析器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38933835/

相关文章:

c++ - 用模板复制构造函数替换默认复制构造函数

c++ - 为什么我在链接到库时出错,但在构建库时却没有?

java - 带有可选月份的日期时间段

c++ - `is_trivially_destructible` 不适用于继承类

c++ - 在 C++11 及更高版本中,std::string::operator[] 是否进行边界检查?

c++ - 为什么 std::cbegin 返回与 std::begin 相同的类型

c++ - 根据编译时条件定义不同的成员函数

c++ - 变量上的 `const constexpr` 是多余的吗?

Python 将字符串解析为字典

c# - Mathematica 语法的解析器?