C++ boost spirit qi解析器在发布和调试中失败

C++ boost spirit qi解析器在发布和调试中失败,c++,visual-studio,boost,boost-spirit,boost-spirit-qi,C++,Visual Studio,Boost,Boost Spirit,Boost Spirit Qi,这将按预期通过调试,但在版本中失败您不能将auto与Spirit v2一起使用: 你有 演示 我试图(更)理解代码的其余部分。有各种各样的例子永远不会奏效: txt('=')是无效的Qi表达式。我以为你想要的是txt>('=') qi::char\u(“a-zA-Z0-9.\:$\-{}[]+/()”不会像你想的那样,因为$-{实际上是字符“range”\x24-\x7b…转义-(或者像在另一个char\ux调用中一样将其放在集合的最末端/最开始) qi::char('-',''.',''

这将按预期通过调试,但在版本中失败

您不能将auto与Spirit v2一起使用:

你有

演示 我试图(更)理解代码的其余部分。有各种各样的例子永远不会奏效:

  • txt('=')
    是无效的Qi表达式。我以为你想要的是
    txt>('=')

  • qi::char\u(“a-zA-Z0-9.\:$\-{}[]+/()”
    不会像你想的那样,因为
    $-{
    实际上是字符“range”
    \x24-\x7b
    …转义
    -
    (或者像在另一个char\ux调用中一样将其放在集合的最末端/最开始)

  • qi::char('-',''.','''.''.''.''.''.''.''.''.''.'.''.''.''.''.'.''.''.''.''.''.''.''.'''.''.'''.''.''''.''

  • specialText
    anytxt
    未使用

  • 首选
    常量迭代器

  • 首选
    上方的命名空间别名,使用命名空间
    以防止难以检测的错误

  • abc=[];
    

    我将很快回顾实际的解析器。稍后再回来
    txt('=')
    应该做什么?它首先不是一个有效的Qi表达式…实际上它是txt>>('='),并添加了一个带有(大量)注释的固定演示:录制的实时会话感谢老兄这在我的应用程序中非常有用LHS值可以是ab$c=[]或xy.123z=[];xy-3.0_z=[];因此这是一种通用规则,我可以解析任何类型的左侧文本
    abc=[];
    
    #include <boost/spirit/include/qi.hpp>
    #include <iostream>
    
    namespace qi = boost::spirit::qi;
    
    int main() {
        std::string const s = "abc=[];";
    
        auto specialtxt = qi::copy(*(qi::char_("-._")));
        auto anytxt     = qi::copy(*(qi::char_("a-zA-Z0-9_.\\:$\\-{}[]+/()")));
        (void) specialtxt;
        (void) anytxt;
    
        auto txt        = qi::copy(qi::no_skip[*(qi::char_("a-zA-Z0-9_.\\:$\'-"))]);
    
        qi::rule<std::string::const_iterator, qi::space_type> rule2 = txt >> '=' >> '[' >> ']';
    
        auto begin = s.begin();
        auto end   = s.end();
    
        if (qi::phrase_parse(begin, end, rule2, qi::space)) {
            std::cout << "MATCH" << std::endl;
        } else {
            std::cout << "NO MATCH" << std::endl;
        }
    
        if (begin != end) {
            std::cout << "Trailing unparsed: '" << std::string(begin, end) << "'\n";
        }
    
    }
    
    MATCH
    Trailing unparsed: ';'