首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost Spirit词位vs no_skip

Boost Spirit词位vs no_skip
EN

Stack Overflow用户
提问于 2020-08-04 01:44:04
回答 1查看 152关注 0票数 1

就像Boost.Spirit上的描述一样,lexeme和no_skip之间唯一的区别就是pre_skip。

但经过一些测试后,我仍然对pre_skip的确切含义感到困惑。

那么什么样的条件会有不同,也许一个例子可以帮助我更好地理解它。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-08-04 05:08:05

预跳过忽略表达式开头的空格。

对比:

代码语言:javascript
复制
#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;
static std::string const input = " 42j";

int main() {
    auto run_test = [](auto p) {
        auto f = input.begin(), l = input.end();
        int i;
        return qi::phrase_parse(f, l, p, qi::space, i)
            ? std::to_string(i)
            : "unparsed";
    };

    std::cout << "no_skip: " << run_test(qi::no_skip[ qi::int_ >> 'j' ]) << "\n";
    std::cout << "lexeme: "  << run_test(qi::lexeme[ qi::int_ >> 'j' ]) << "\n";
}

打印:

代码语言:javascript
复制
no_skip: unparsed
lexeme: 42

正如您所看到的,lexeme将默默地吃掉前导空格。这就是预跳过了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63234428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档