当前位置:  开发笔记 > 编程语言 > 正文

boost :: spirit解析带有分隔符号的double

如何解决《boost::spirit解析带有分隔符号的double》经验,为你挑选了1个好方法。



1> sehe..:

我会像您在这里一样进行此操作。您应该考虑还原first迭代器,以防进一步解析失败。

您可能需要仔细检查multi_pass<>适应的迭代器上的刷新语义(我认为这是可以的,因为real_parser无论如何,包装必须能够在失败时回退)。


当然,考虑到语法的简单性,可以减少样本,但这并不是我想的重点。

这是一个较短的演示,显示了更通用的跳过策略(blank_type默认情况下使用):

Live On Coliru

#include 

namespace qi = boost::spirit::qi;

template 
struct skip_after_sign_policies : boost::spirit::qi::real_policies {
    // allow skipping chars between a possible sign and a folling real number
    template 
    static bool parse_sign(Iterator& first, Iterator const& last) {
        return qi::extract_sign(first, last)
            && qi::phrase_parse(first, last, qi::eps, Skipper {});
    }
};

int main() {
    qi::real_parser > grammar;

    std::string const str = " -  1.234 ";

    auto it = str.begin();
    double value;
    bool ok = phrase_parse(it, str.end(), grammar, qi::space, value);

    std::cout << std::boolalpha << ok << " " << value;
    if (it != str.end())
        std::cout << "Remaining: '" << std::string(it, str.end()) << "'\n";
}

版画

true -1.234

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有