BoostSpirit.Qi:如何报告解析器警告

Boost.Spirit.Qi: How to report parser warnings?

本文关键字:警告 告解 何报 Qi BoostSpirit      更新时间:2023-10-16

如何报告解析器警告?类似于报告错误,但解析器不能停止。只有日志警告消息和子表达式导致了警告。

示例输入:

 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'

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

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

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