当文件在具有剩余期望的规则中间结束时,它不会触发期望错误(当然,它确实无法解析)。
触发行为的简化示例如下:
data_var_decls_r
%= (lit("data")
> lit('{'))
> lit('}');
如果输入仅为
data {
然后触发最终预期}
的预期错误。
有没有办法处理超出文件末尾的期望错误?
答案 0 :(得分:2)
将其变成一个独立的例子:
#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);
}