我正在尝试使用on_errorBoost :: Spirit :: qi 的机制来找出解析失败的原因.
我在on_error函数中设置了一个断点,并且正在调用函数,但没有输出(nada,nothing,void,...).
简单on_error:
on_error<fail>(level1,
boost::phoenix::ref(std::cout) << "I've failed.\n"
);
Run Code Online (Sandbox Code Playgroud)
复杂on_error(来自不同的网站):
on_error<fail>
(
start,
boost::phoenix::ref(std::cout)
<< val("Error! Expecting ")
<< _4
<< val(" here: \"")
<< construct<std::string>(qi::_3, qi::_2)
<< val("\"")
<< std::endl
);
Run Code Online (Sandbox Code Playgroud)
这是我的类包含简单on_error:
template <typename Iterator, typename Skipper>
struct Event_Compound
: qi::grammar<Iterator, Skipper>
{
Event_Compound ()
: Event_Compound::base_type(start, "Compound-Event")
{
using qi::lexeme;
using qi::lit;
using namespace qi;
using boost::spirit::ascii::char_;
relational_operator =
lit("&&")[Matched_Relational_AND]
|| lit("||")[Matched_Relational_OR]
; …Run Code Online (Sandbox Code Playgroud) 如何在规则开始时检测到错误?例如,考虑文档中包含的Mini XML示例.如果我为解析器提供类似的东西:
<element>this is an error<element>
Run Code Online (Sandbox Code Playgroud)
然后我得到:
错误!期待这里:""
错误!期待这里:""
解析失败了.
那很好,但后来考虑喂它:
element>this is an error</element>
Run Code Online (Sandbox Code Playgroud)
我得到的非常通用,不太有用:
解析失败了.
如何修改规则以信息方式报告错误?