【问题标题】:Boost.Spirit: Difference between operators "%=" and "="Boost.Spirit:运算符“%=”和“=”之间的区别
【发布时间】:2016-05-18 16:44:18
【问题描述】:

我不明白这两个运算符之间的区别。让我们举个例子,将"AA,BB,CC,DD" 之类的输入解析为字符串向量。

namespace qi = boost::spirit::qi;
class my_grammar : public qi::grammar<string::const_iterator, string()>
{
public:
  my_grammar() : base_type(start) {
    using qi::_1;
    using qi::char_;
    start = *(char_ - qi::lit(','));
  }
  qi::rule<string::const_iterator, string()> start;
};

据我所知,a %= b 等同于a = b[_val = _1]。这很清楚。但另一方面,解析器*(char_ - qi::lit(',')) 具有类型为std::string 的合成属性,匹配的序列将分配给该属性。使用start = *(char_ - qi::lit(',')) 的结果是一样的。那么使用运算符%=是什么情况呢?

【问题讨论】:

标签: c++ boost boost-spirit-qi


【解决方案1】:

好的,我在 boost 文档 http://www.boost.org/doc/libs/1_60_0/libs/spirit/doc/html/spirit/qi.html 中找到了它:

 Note
 r %= p and r = p are equivalent if there are no semantic actions associated with p. 

所以如果start 规则包含语义动作ex.

*(char_[boost::phoenix::ref(my_string) = _1] - qi::lit(','))`

然后将运算符更改为%= 会有所不同。

【讨论】:

  • 干得好。在(希望)可搜索的问答中再次记录它并没有什么坏处
猜你喜欢
  • 2011-05-24
  • 2011-10-22
  • 2012-10-06
  • 2010-12-30
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多