就像Boost.Spirit上的描述一样,lexeme和no_skip之间唯一的区别就是pre_skip。
但经过一些测试后,我仍然对pre_skip的确切含义感到困惑。
那么什么样的条件会有不同,也许一个例子可以帮助我更好地理解它。
谢谢!
发布于 2020-08-04 05:08:05
预跳过忽略表达式开头的空格。
对比:
#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";
}打印:
no_skip: unparsed
lexeme: 42正如您所看到的,lexeme将默默地吃掉前导空格。这就是预跳过了。
https://stackoverflow.com/questions/63234428
复制相似问题