XML评论标签的灵气提升规则

Boost Spirit Qi rule for XML comment tag

XML 评论标签的 EBNF 规则是:

Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

如何获得灵气增幅规则?

using boost::spirit::qi::ascii::char_;
using boost::spirit::qi::lit;
comment = lit("<!--") >> *((~char_('-') >> char_) | (char_('-') >> ~char_('-'))) >> lit("-->");

这是我最好的尝试,但不正确...

~char_('-')对应(Char - '-').
第一部分:

(~char_('-') >> char_)

应该是

~char_('-')

一个人。

否则这个 char_ 可以匹配 - 并且第二部分 (char_('-') >> ~char_('-') 匹配 -> 下一轮。

我更直接地说:

comment = "<!--" > *(qi::char_ - "--") > "-->";

记得使规则 lexeme (disable/ignore skipper)。 (参见 Boost spirit skipper issues

#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
using It = std::string::const_iterator;

int main() {
    qi::rule<It> comment; // lexeme
    comment = "<!--" > *(qi::char_ - "--") > "-->";
}