boost :: spirit :: qi解析的更丰富的错误返回消息

时间:2014-11-14 15:30:41

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

我正在使用Boost精神来解析本质上是一个数学表达式(m_formula中的一些文本是std::string

我设置

double value;
auto first = m_formula.begin();
auto last = m_formula.end();

然后,对于语法grammar,我解析m_formula

boost::spirit::qi::phrase_parse(first, last, grammar, ascii::space, value);

目前我有

if (first != last){
    /*ToDo - display "invalid formula " + m_formula*/
}

有没有办法可以改进错误处理,例如告诉我哪一部分公式导致解析器失败?

1 个答案:

答案 0 :(得分:3)

您可以使用期望点,这会引发qi::expectation_failure<It>例外。

它们包含告诉哪些规则失败的信息(以及指向该解析器表达式的匹配开始以及投掷点的源迭代器)。

qi::on_error是一种在语法中处理这些期望失败的机制(如果你不想在外部捕获它们。

现在,如果您的输入是多行的,您可能希望跟踪输入行/列信息。 line_pos_iterator执行此操作。如果这样做,请查看repository::qi::iter_pos指令,以便将行/列信息作为规则中的属性公开。

我暂时将其留在此处:如果您愿意,可以使用上述任意关键字搜索代码。