相关疑难解决方法(0)

Boost :: Spirit - on_error不打印

我正在尝试使用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)

c++ error-handling parsing boost-spirit boost-spirit-qi

6
推荐指数
1
解决办法
868
查看次数

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

如何在规则开始时检测到错误?例如,考虑文档中包含的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)

我得到的非常通用,不太有用:

解析失败了.

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

c++ boost boost-spirit boost-spirit-qi

4
推荐指数
1
解决办法
796
查看次数