如果文件以Boost Spirit Qi解析器结束,则不会触发期望失败

时间:2017-07-25 15:07:30

标签: boost boost-spirit

当文件在具有剩余期望的规则中间结束时,它不会触发期望错误(当然,它确实无法解析)。

触发行为的简化示例如下:

data_var_decls_r
  %= (lit("data")
       > lit('{'))
  > lit('}');

如果输入仅为

data {

然后触发最终预期}的预期错误。

有没有办法处理超出文件末尾的期望错误?

1 个答案:

答案 0 :(得分:2)

将其变成一个独立的例子:

查看 Live On Wandbox

#include <boost/spirit/include/qi.hpp>

namespace test {
    using namespace boost::spirit::qi;

    rule<std::string::const_iterator> rule = lit("data") > '{' > '}';
}

int main() {
    std::string const input("data{");

    bool ok = parse(input.begin(), input.end(), test::rule);
}

投掷期望失败。

即使使用太空船长,它仍然会抛出:

同时查看 Live On Wandbox

#include <boost/spirit/include/qi.hpp>

namespace test {
    using namespace boost::spirit::qi;

    rule<std::string::const_iterator, space_type> rule = lit("data") > '{' > '}';
}

int main() {
    std::string const input("data{");

    bool ok = phrase_parse(input.begin(), input.end(), test::rule, test::space);
}