Boost.Spirit.Qi:如何报告解析器警告?

时间:2011-05-26 08:34:03

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

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

示例输入:

 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'

1 个答案:

答案 0 :(得分:4)

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

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

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