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_ - "--") > "-->";
}
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_ - "--") > "-->";
}