如何在 Spirit x3 中做到 no_case

How to do no_case in Spirit x3

我有一个问题,IDK 如何在精神 X3 中做 no_case。 Spirit中有no_case,但是当我使用它时,我得到:

    // If you get an error no matching function for call to 'as_parser'
    // here, for either p or s, then p or s is not a parser or there is
    // no suitable conversion from p to a parser.

可能我很困惑,我正在尝试混合苹果和橙子(qi 和 x3,例如 IDK x3::parse 和 qi::parse 之间的区别)

所以 tl;dr 我的问题是如何进行这项工作:

bool parsed = phrase_parse(first, last, no_case[char_('a')], space);

(没有 no_case 它有效)

是的,您可能混合了 x3 和 qi。这是最简单的例子:

Live On Coliru

#include <boost/spirit/home/x3.hpp>
#include <cassert>

namespace x3 = boost::spirit::x3;

int main() {
    std::string const input = "A";
    auto first = input.begin(), last = input.end();
    bool parsed = x3::phrase_parse(first, last, x3::no_case[x3::char_('a')], x3::space);
    return parsed? 0:1;
}