【问题标题】:Mixed usage of the sequence parser and the expectation parser序列解析器和期望解析器的混合使用
【发布时间】:2015-05-30 10:23:18
【问题描述】:

> qi::double_>> qi::double_

我要解析下面的字符串

    "***: @a_-091 , *** 1"

到定义为的结构

    using type = boost::fusion::vector<char, int, double>;

当解析器

    *qi::omit[qi::char_ - '@'] >> '@' >> qi::char_ >> '_' >> qi::int_ >> *qi::omit[qi::char_ - qi::digit] >> qi::double_

使用,结果OK。但是,使用下面的解析器,结果完全不同

    *qi::omit[qi::char_ - '@'] >> '@' >> qi::char_ >> '_' >> qi::int_ >> *qi::omit[qi::char_ - qi::digit] > qi::double_

以下是示例代码。

    #include <vector>
    #include <sstream>
    #include <iostream>
    #include <boost/spirit/include/qi.hpp>
    #include <boost/spirit/include/qi_match.hpp>
    #include <boost/fusion/include/io.hpp>

    using type = boost::fusion::vector<char, int, double>;

    int main() {
        std::istringstream istr{
            "***: @a_-091 , *** 1"
        };

        std::vector<type> data;

        namespace qi = boost::spirit::qi;
        istr >> std::noskipws >> qi::match(*(
            *qi::omit[qi::char_ - '@'] >> '@' >> qi::char_ >> '_' >> qi::int_ >> *qi::omit[qi::char_ - qi::digit] > qi::double_
            ), data);
        // istr >> std::noskipws >> qi::match(*(
            *qi::omit[qi::char_ - '@'] >> '@' >> qi::char_ >> '_' >> qi::int_ >> *qi::omit[qi::char_ - qi::digit] >> qi::double_
            ), data);

        for (size_t i = 0; i != data.size(); ++i) {
            std::cerr << data[i] << "\n";
        }

        return 0;
    }

PS: 问题已通过评论中cv_and_he证明的链接解决。这是由于“>>”(序列解析器)和“>”(期望解析器)的混合使用造成的。

【问题讨论】:

  • 两个建议:一题一题,题中必须有代码。并描述代码,描述它正在做什么(或不做什么)以及你所期望的。 (并且 cmets 进入评论部分,而不是在问题中。)
  • @Mat 谢谢。期待进一步的建议。
  • 你谈到了两件做不同事情的事情。然而你只展示了一段代码,却没有描述。
  • @Mat 我不太明白。正如你所建议的,我删除了一个问题。现在,问题是“>>”和“>”之间的不同行为。
  • 我相信您的问题与here 描述的问题类似。

标签: c++ boost boost-spirit boost-spirit-qi


【解决方案1】:

作为一个快速提示,也许您可​​以使用&gt;&gt; 重写。

还有期望点你可以写

a >> b > c

喜欢

a >> b >> (c > eps)

我稍后会测试这个

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多