代码之家  ›  专栏  ›  技术社区  ›  Rajeshwar

对精神语法的理解

  •  0
  • Rajeshwar  · 技术社区  · 13 年前

    在浏览文档时,我读到了

    对于一系列用逗号分隔的双打,我们可以这样做(我理解)

    double_ >> * (',' >> double_) double_ %

    但是下面的表达式是什么意思呢。它应该将逗号分隔的字符串分割成一个向量,而且它很有效。如果有人能澄清一下,我将不胜感激 - 运算符我相信这是一个差运算符,但我搞不清它在这里的作用

    *(qi::char_ - ',') % ','

    3 回复  |  直到 13 年前
        1
  •  5
  •   Igor R.    13 年前

    *(char_ - ',') 意思是“匹配零个或多个字符,但“,”,也可以这样写: *~char_(",") 另一方面 *char_ 意思是“匹配零个或多个字符”。

    要理解为什么需要排除,只需尝试使用和不使用它:

    #include <string>
    #include <boost/spirit/home/qi.hpp>
    int main()
    {
        using namespace boost::spirit::qi;
        std::vector<std::string> out1, out2;
        std::string s = "str1, str2, str3";
        bool b = parse(s.begin(), s.end(), *~char_(",") % ",", out1); // out1: ["str1", "str2", "str3"]
        b = parse(s.begin(), s.end(), *char_ % ",", out2); // out2: ["str1, str2, str3"]
    }
    
        2
  •  0
  •   filmor    13 年前

    qi::char_ - ',' 匹配所有字符,但 , 以防止内心的表达过于贪婪。

        3
  •  0
  •   Vasily Biryukov    13 年前

    你真的需要阅读 EBNF 理解BoostSpirit的标准。

    推荐文章