【问题标题】:Boost.Spirit.Qi: How to report parser warnings?Boost.Spirit.Qi:如何报告解析器警告?
【发布时间】:2011-05-26 08:34:02
【问题描述】:

如何报告解析器警告? 类似于报错,但解析器一定不能停止。 仅记录警告消息和子表达式导致警告。

示例输入:

 select * from table where row>='' && row<>'hello'

预期输出:

 Warning: expression is always true: row>=''
 Warning: && is deprecated, use AND: row>='' && row<>'hello'
 Warning: <> is deprecated, use !=: row<>'hello'

【问题讨论】:

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


    【解决方案1】:

    如果你想继续解析,你可以像以前一样注册一个错误处理程序,除了你必须指定accept作为处理程序策略:

    rule<Iterator> r = ... > !eps;
    on_error<accept>(r, handler);
    

    附加的&gt; !eps 在任何情况下都会强制出错并像往常一样调用handler,但它会在“错误”之后接受匹配,继续进行,就好像什么都没发生一样。

    【讨论】:

    • 谢谢!有没有办法在不分配_pass = false、引发on_error然后继续解析的情况下在语义操作中获取当前迭代器?仅从语义操作代码中打印警告似乎更简单,但我找到了如何获取输入迭代器(或者,更好的是,当前解析的表达式的迭代器范围)的方法,以便将输入文本的摘录包含到警告信息。
    猜你喜欢
    • 2021-11-22
    • 2018-10-07
    • 1970-01-01
    • 2013-04-29
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多