Boost.Spirit.Qi - 规则开头的错误

时间:2013-04-15 19:03:53

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

如何在规则开始时检测到错误?例如,请考虑文档中包含的Mini XML example。如果我给解析器提供类似的东西:

<element>this is an error<element>

然后我得到:

  

错误!期待这里:“”

     

错误!期待这里:“”

     

解析失败。

那很好,但后来考虑喂它:

element>this is an error</element>

而且我得到了非常通用且不那么有用的东西:

  

解析失败。

如何修改规则以便以信息方式报告错误?

1 个答案:

答案 0 :(得分:8)

您希望在文档根级别要求元素。

其他消息由失败的期望点生成。您将在开始时想要额外的期望点。我这样做:

  1. 将旧的xml规则重命名为element
  2. 创建一个新的xml规则,其中元素位于期望点:

        xml = qi::eps > element;
    
  3. [不要改变任何其他]

  4. 的利润!

  5. 输出变为:

    Error! Expecting <element> here: "element>this is a test</element>
    "
    -------------------------
    Parsing failed
    -------------------------
    

    请参阅it live here