就像上面的描述一样精神振奋, lexeme 和 no_skip 之间的唯一区别是 pre_skip。
但经过一些测试,我仍然对 pre_skip 的确切含义感到困惑。
那么什么样的条件会产生影响,也许一个例子可以帮助我更好地理解它。
Thanks!
预跳过会忽略表达式开头的空格。
对比:
住在科里鲁
#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";
}
Prints:
no_skip: unparsed
lexeme: 42
如你看到的lexeme
会默默地吃掉前导空白。这就是预跳过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)