Boost spirit qi在使用长序列语法时解析编译错误

问题描述 投票:0回答:0
void Parse(string const& input)
{
    string::const_iterator begin = input.begin(), end = input.end();

    auto pin_parser    = qi::copy(+(qi::char_("a-z")));
    auto val_parser    = qi::copy(qi::float_ >> ':' >> *(qi::float_) >> ':' >> qi::float_);

    auto connect_parser = qi::copy( 
                                qi::lit("CONNECT") >> qi::space >> pin_parser[boost::phoenix::bind(callback, "PIN1", qi::_1)] >> qi::space
                                >> pin_parser[boost::phoenix::bind(callback, "PIN2", qi::_1)] >> qi::space
                                >> val_parser >> qi::space >> val_parser >> qi::space
                               );

    bool is_succ = qi::parse(begin, end, +connect_parser);
    std::cout << "Succ " << is_succ << std::endl;
}

我正在尝试使用 boost::spirit::qi 解析以下字符串。

连接时钟 sda 1.020::1.030 0.200::0.00

CONNECT da doai 0.100::0.050 0.040::0.300

然后通过回调发送解析出的token。但是出现以下错误。 只有在尝试解析长序列时才会出现编译问题。如果语法序列更短,编译问题就会消失。

例如,如果我使用下面的语法解析以下内容,则没有编译错误。

连接时钟 0.200::0.00

连接 da 0.040::0.300

auto connect_parser = qi::copy(qi::lit("CONNECT") >> qi::space >> pin_parser[boost::phoenix::bind(callback, "PIN1", qi::_1)] >> qi::space
                                >> val_parser >> qi::space
                               );

spirit::tag::space, boost::spirit::char_encoding::standard> >, 0l> >, 2l>&>, 1l>]' PASDFParser.cpp:81:62:此处需要 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/container/vector/convert.hpp:27:13: 错误:无效使用不完整类型 'struct boost::fusion::detail: :barrier::as_vector<13>' 类型; ^ 在 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/container/vector/detail/as_vector.hpp:15:0 包含的文件中, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/container/vector/convert.hpp:11, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/container/vector.hpp:30, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/view/zip_view/detail/at_impl.hpp:12, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/view/zip_view/zip_view.hpp:19, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/view/zip_view.hpp:12, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/sequence/intrinsic/swap.hpp:15, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/sequence/intrinsic.hpp:23, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/include/intrinsic.hpp:11, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/proto/fusion.hpp:22, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/proto/core.hpp:21, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/proto/proto.hpp:12, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/spirit/home/support/meta_compiler.hpp:19, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/spirit/home/qi/meta_compiler.hpp:14, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/spirit/home/qi/action/action.hpp:14, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/spirit/home/qi/action.hpp:14, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/spirit/home/qi.hpp:14, 来自 /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/spirit/include/qi.hpp:16, 来自 PASDFParser.h:17, 来自 PASDFParser.cpp:10: /calypto/tools/install/boost/boost_1_59_0/rhel7/m64/include/boost/fusion/container/vector/detail/cpp03/as_vector.hpp:28:12: 注意:'struct boost::fusion::detail 的声明::barrier::as_vector<13>' 结构 as_vector;

c++ boost boost-spirit-qi
© www.soinside.com 2019 - 2024. All rights reserved.